Que 'configuração adicional' é necessária para fazer referência a um assembly de modo misto do .NET 2.0 em um projeto do .NET 4.0?

StackOverflow https://stackoverflow.com/questions/2455654

Pergunta

Tenho um projeto no qual gostaria de usar alguns dos recursos do .NET 4.0, mas um requisito principal é que eu possa usar a estrutura System.Data.SQLite que é compilada em 2.X.Vejo menção de que isso é possível, como a resposta aceita aqui mas não vejo como realmente conseguir isso.

Quando tento executar meu projeto 4.0 enquanto faço referência ao assembly 2.X, recebo:

O conjunto do modo misto é construído em relação à 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 de configuração adicionais.

Qual "configuração adicional" é necessária?

Foi útil?

Solução

Para usar um CLR 2.0 conjunto do modo misto, você precisa modificar seu arquivo app.config para incluir:

<?xml version="1.0"?>
<configuration>
<startup uselegacyv2RuntimeActivationPolicy = "true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

A chave é o useLegacyV2RuntimeActivationPolicy bandeira. Isso faz com que o CLR use a versão mais recente (4.0) para carregar o conjunto do modo misto. Sem isso, não funcionará.

Observe que isso é importante apenas para montagens de modo misto (C ++/CLI). Você pode carregar todos os conjuntos gerenciados de CLR 2 sem especificar isso em app.config.

Outras dicas

este post do fórum No .NET Framework Developer Center. Pode fornecer alguma visão.

(Adicione ao arquivo de configuração do aplicativo.)

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Dependendo da versão da estrutura que você está segmentando, convém procurar aqui para obter a string correta:

http://msdn.microsoft.com/en-us/library/ee517334.aspx

Eu perdi horas tentando descobrir por que meu cliente .NET 4.0 de liberação precisava da versão completa. Eu usei isso no final:

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

Depois de definir o aplicativo.config arquivo, o visual studio irá gerar uma cópia na pasta bin chamada App.exe.config.Copie isso para o diretório do aplicativo durante a implantação.Parece óbvio, mas surpreendentemente muitas pessoas erram essa etapa.Os desenvolvedores do WinForms não estão acostumados a configurar arquivos :).

O uso de montagens 2.0 e 4.0 juntos não é bastante direto.

A ordem das declarações da estrutura suportada no app.config realmente afeta a exceção do modo misto ser jogado. Se você violar a ordem da declaração, receberá um erro no modo misto. Este é o objetivo desta resposta.

Portanto, se você receber o erro em um aplicativo Windows Forms, tente isso, principalmente o Windows Forms Apps.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

Ou se o projeto não for o formulário do Windows. Em um projeto da web, adicione isso ao arquivo web.config.

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

Foi capaz de resolver o problema adicionando "comece" elemento com "Uselegacyv2RuntimeActivationPolicy" Conjunto de atributos.

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

Mas tive que colocá -lo como o primeiro elemento filho da tag de configuração no app.config para que ela entrasse em vigor.

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....

O exposto acima não funcionou para mim (estou trabalhando em um aplicativo da web) - mas isso aconteceu ...

Editar o arquivo SGEN.EXE.CONFIG na pasta (eu tive que criar uma primeiro); C: Arquivos de programas (x86) Microsoft SDKS Windows V8.0a bin netfx 4.0 Tools (também existe uma na pasta v7.0, mas não precisei alterar essa, estou usando o VS2012)

Os Conentes do XML devem ser assim (o mesmo em respostas anteriores)

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>

Se você está trabalhando em um serviço da web e a montagem v2.0 é uma dependência que foi carregada por Wcfsvchost.exe Então você deve incluir

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
</startup>

Em .. Microsoft Visual Studio 10.0 Common7 IDE Wcfsvchost.exe.config Arquivo

Dessa forma, o Visual Studio poderá enviar as informações corretas através do carregador em tempo de execução.

Encontrei esse problema quando mudamos para Visual Studio 2015.Nenhuma das respostas acima funcionou para nós.No final, fizemos funcionar adicionando o seguinte arquivo de configuração ao TODOS os executáveis ​​sgen.exe na máquina

<?xml version ="1.0"?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0" />
        </startup>    
</configuration>

Particularmente neste local, mesmo quando tínhamos como alvo o .NET 4.0:

C:\Arquivos de programas (x86)\Microsoft SDKs\Windows\v10.0A\bin ETFX 4.6 Tools

Eu usei esta configuração:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0"/>
    <supportedRuntime version="v4.0"/>
</startup>

Trabalhou para mim

Eu tive esse problema ao atualizar para o Visual Studio 2015 e nenhuma das soluções postadas aqui fez alguma diferença, embora a configuração esteja certa, o local para a alteração não é. Corrigi esse problema adicionando esta configuração:

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

Para: C: Arquivos de Programas (x86) Microsoft Visual Studio 14.0 Common7 IDE CommOnextensions Microsoft TestWindow te.processhost.managed.exe.config

Em seguida, reiniciei o Visual Studio.

Encontrei uma maneira de contornar isso depois de 3-4 horas no Google. Eu adicionei o seguinte

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

Se isso não resolver seu problema, então-> nas referências do projeto Right Click on DLL onde você obteve erro -> Select Properties--> Check the Run-time Version -> Se for v2.0.50727 Então sabemos o problema. O problema é:- você está tendo 2.0 Version of respective DLL. A solução é:- você pode delete the respective DLL das referências do projeto e depois download the latest version of DLL's No site correspondente e adicione a referência da referência da DLL da versão mais recente, ela funcionará.

Eu estava enfrentando esse mesmo erro e gastei para sempre adicionando as instruções de inicialização sugeridas a vários arquivos de configuração em minha solução, tentando isolar a incompatibilidade da estrutura. Nada funcionou. Eu também adicionei Informações de inicialização para meus esquemas XML. Isso também não ajudou. Olhando para o arquivo real que estava causando o problema (o que apenas diria que foi "movido ou excluído") revelou que era na verdade o compilador de licença (LC).

Excluir o arquivo Licenses O ofensas.licx parece ter corrigido o problema.

Eu estava enfrentando um problema semelhante ao migrar algum código do VS 2008 para o VS 2010, fazendo alterações no arquivo app.config, resolveu o problema para mim.

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
         sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>

Adicione a seguir neste local C: Arquivos de Programas (x86) Microsoft SDKS Windows V7.0a bin netfx 4.0 ferramentas x64 nome do arquivo: sgen.exe.config (se você não encontrar este arquivo, criar e adicionar um)

 <?xml version ="1.0"?>

<configuration>
 <runtime>        
        <generatePublisherEvidence enabled="false"/>    
    </runtime>

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

Fazendo isso resolveu o problema

Eu uso

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

Funciona, mas pouco antes de de </configuration> Tag, caso contrário, a tag de inicialização não funciona corretamente

Também tive esse problema com a biblioteca de classes, se alguém tiver o problema com a biblioteca de classes adicionada ao seu aplicativo principal. Basta adicionar

<startup useLegacyV2RuntimeActivationPolicy="true">

Para você, o aplicativo principal que seria escolhido pela biblioteca de classes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top