Pergunta

Ao converter um projeto que usou Slimdx e, portanto, possui código não gerenciado, para .NET 4.0, entrei no seguinte erro:

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.

O Google ao redor me deu a solução, que é adicionar isso à configuração de aplicativos:

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

Minha pergunta é: qual é o useLegacyV2RuntimeActivationPolicy fazendo? Não consigo encontrar nenhuma documentação sobre isso.

Foi útil?

Solução

Depois de um pouco de tempo (e mais pesquisas), encontrei esta entrada do blog por Jomo Fisher.

Um dos problemas recentes que vimos é que, devido ao suporte para os tempos de execução lado a lado, o .NET 4.0 mudou a maneira como se liga aos conjuntos de modos mistos mais antigos. Esses conjuntos são, por exemplo, aqueles que são compilados a partir de C ++ CLI. Atualmente, os conjuntos diretos disponíveis são o modo misto. Se você vir uma mensagem como esta, sabe que se encontrou com o problema:

O conjunto do modo misto é criado em relação à versão 'v1.1.4322' 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.

Recorte

A boa notícia para as inscrições é que você tem a opção de voltar ao .NET 2.0 ERA Ligação para essas montagens, definindo um sinalizador app.config como assim:

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

Portanto, parece que a maneira como os conjuntos de modos mistos de tempo de execução foram alterados. Não consigo encontrar detalhes sobre essa alteração ou por que ela foi feita. Mas o useLegacyV2RuntimeActivationPolicy Atributo reverte de volta ao carregamento CLR 2.0.

Outras dicas

Aqui está uma explicação que escrevi recentemente para ajudar com o vazio de informações sobre este atributo.http://www.marklio.com/marklio/permalink,guid ,cc34c3c-be44-4422-86b7-900900e451f9.aspx (Link da máquina Wayback de arquivo da Internet)

Para citar os bits mais relevantes:

Instalação do .NET] V4 é "sem impacto". Não deve alterar o comportamento dos componentes existentes quando instalado.

O atributo uselegacyv2runtimeActivationPolicy basicamente permite que você diga: “Tenho algumas dependências das APIs do Legacy Shim. Por favor, faça com que eles funcionem da maneira que costumavam fazer com relação ao tempo de execução escolhido. ”

Por que não fazemos disso o comportamento padrão? Você pode argumentar que esse comportamento é mais compatível e facilita a porção de código das versões anteriores. Se você se lembrar, esse não pode ser o comportamento padrão porque tornaria a instalação do V4 impactante, o que pode quebrar os aplicativos existentes instalados em sua máquina.

A postagem completa explica isso com mais detalhes. Na RTM, o MSDN Docs sobre isso deve ser melhor.

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