O conjunto de modo misto é construído com a versão 'v2.0.50727' do tempo de execução

163

Estou recebendo a seguinte exceção:

O conjunto de modo misto é construído com a versão 'v2.0.50727' do tempo de execução e não pode ser carregado no tempo de execução 4.0 sem informações adicionais de configuração.

como eu estava tentando exportar relatório de cristal do meu programa WPF ...

Eu adicionei o seguinte no app.config já ...

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
  <NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>

Qualquer especialista pode ajudar ????

Referência que encontrei: http://www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime

Christina Wong
fonte
1
IMPORTANTE: Se o erro ocorrer com a coluna "Arquivo" como SGEN, a correção precisará estar em um arquivo sgen.exe.configao lado de sgen.exe. Por exemplo, para o VS 2015, crie C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Fonte: montagem de modo misto SGEN Conteúdo mínimo do arquivo:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve
1
Lembre-se de que você pode não apenas ter "C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \", mas também um diretório 'x64' que também possui um sgen. exe e possivelmente várias outras cópias / versões do sgen, todos em caminhos diferentes, dependendo de quantas e quais versões do VS você instalou.
MickeyfAgain_BeforeExitOfSO 26/10
@ToolmakerSteve Por favor, poste seu comentário como resposta para que eu possa votar novamente; nenhuma das outras respostas me ajudou.
24519 Malcolm
@Malcolm - OK, postado como resposta
ToolmakerSteve

Respostas:

238

Tente usar esta tag de inicialização exata no seu app.config no nó de configuração

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <requiredRuntime version="v4.0.20506" />
  </startup>
Talha
fonte
2
Na verdade, você deve adicionar as linhas complicadas ao YourApp. ** exe **. Config.
AntonK
24
Esse é o app.config. O compilador irá renomeá-lo na compilação.
7402 Jeff
65
A única parte necessária é useLegacyV2RuntimeActivationPolicy = "true". Você pode deixar sua versão atual do framework.
Ben Gripka
3
Posso dobrar quando Ben diz, deixei de fora o tempo de execução adicional necessário e meu problema desapareceu.
Mike Malter
1
Este link também deve ajudar a compreender qual é o problema, e que a solução está a fazer para você: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane
85

A exceção identifica claramente que algum componente .NET 2.0.50727 foi incluído no .NET 4.0. No arquivo App.config, use este:

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

Resolveu o meu problema

Bibaswann Bandyopadhyay
fonte
Isso precisa de uma barra final<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn
8

Inclua o atributo useLegacyV2RuntimeActivationPolicy = "true" no arquivo app.config dos aplicativos.

Valor antigo

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
  </startup>

Novo valor

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
  </startup>

Isso resolverá o seu problema.

Brijesh Kumar Tripathi
fonte
É bom saber que funcionou para você. Obrigado por seu comentário !
Brijesh Kumar Tripathi
4

Na verdade, tive esse problema idêntico com a solução inversa . Eu havia atualizado um projeto .NET para o .NET 4.0 e depois revertido para o .NET 3.5. O app.config no meu projeto continuou com o seguinte, causando o erro acima em questão:

<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

A solução para solucionar o erro foi revertê-lo para a referência 2.0 apropriada da seguinte maneira:

<startup>
  <supportedRuntime version="v2.0.50727"/>
</startup>

Portanto, se um downgrade estiver produzindo o erro acima, pode ser necessário fazer backup da versão suportada do .NET Framework.

atconway
fonte
1

Para mim, isso foi lançado ao executar testes de unidade em MSTest(VS2015). Teve que adicionar

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

no

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Managed.exe.config

Montagem de modo misto MSTest falhando no VS2015

Janis S.
fonte
1

Ativar o legado do app.config não funcionou para mim. Por motivos desconhecidos, meu aplicativo não estava ativando a política de tempo de execução V2. Eu encontrei um trabalho por aqui .

Habilitar o legado do app.config é uma abordagem recomendada, mas em alguns casos não funciona conforme o esperado. Use o código a seguir no aplicativo principal para forçar a política do Legacy V2:

public static class RuntimePolicyHelper
{
public static bool LegacyV2RuntimeEnabledSuccessfully { get; private set; }

static RuntimePolicyHelper()
{
    ICLRRuntimeInfo clrRuntimeInfo =
        (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject(
            Guid.Empty, 
            typeof(ICLRRuntimeInfo).GUID);
    try
    {
        clrRuntimeInfo.BindAsLegacyV2Runtime();
        LegacyV2RuntimeEnabledSuccessfully = true;
    }
    catch (COMException)
    {
        // This occurs with an HRESULT meaning 
        // "A different runtime was already bound to the legacy CLR version 2 activation policy."
        LegacyV2RuntimeEnabledSuccessfully = false;
    }
}

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")]
private interface ICLRRuntimeInfo
{
    void xGetVersionString();
    void xGetRuntimeDirectory();
    void xIsLoaded();
    void xIsLoadable();
    void xLoadErrorString();
    void xLoadLibrary();
    void xGetProcAddress();
    void xGetInterface();
    void xSetDefaultStartupFlags();
    void xGetDefaultStartupFlags();

    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
    void BindAsLegacyV2Runtime();
}
}
Talha Imam
fonte
1

Tente usar outro arquivo de configuração (não o do seu projeto) e RESTART Visual Studio:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.config
(32-bit)

ou

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)
Alexander Tytarchuk
fonte
Eu expandiria isso, porque contornar o nativo .configque reside em um aplicativo e normalmente necessário para configurações de aplicativos adicionais não seria uma boa solução.
Atletway 4/03/14
3
Para testes de unidade, a alteração da configuração deve ocorrer no arquivo vstest.executionengine.x86.exe.config porque esse executável é o processo pai do código que você está testando. Este problema foi supostamente corrigido no Visual Studio 2012 SP4, mas ainda está presente na minha máquina.
Brandon S
(Note que você não deveria ter que reiniciar o Visual Studio para que as alterações tenham efeito Você deve apenas precisa tarefa final na vstest * processos porque aqueles pendurar ao redor, mesmo depois de sua unidade testes completos...)
Brandon S
Upvoating isso, pois me levou ao local real onde eu tive que mudar isso.
Janis S.
1

Se o erro ocorrer com a coluna "Arquivo" como SGEN, a correção precisará estar em um arquivo sgen.exe.configao lado de sgen.exe. Por exemplo, para o VS 2015, crie C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Conteúdo mínimo do arquivo:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

Fonte: Montagem em modo misto SGEN

Fabricante de ferramentas
fonte