Pergunta

Após a atualização do VS11 Beta para o VS2012 RC - modifiquei o direcionamento do .NET 4.0 para o .NET 4.5.Percebo na seção seguinte do app.config

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

Para que serve o acima?

Quando tentei criar um novo projeto (não atualizar o projeto existente) no VS2012 RC, não vejo a seção acima em app.config

Foi útil?

Solução

Esse é um efeito colateral do eterno atoleiro de versões do .NET.O .NET 4.5 não é uma versão lado a lado do .NET Framework, ele substitui completamente uma instalação do .NET 4.0.Assim como o 3.0 e o 3.5 substituíram a instalação do .NET 2.0.

As atualizações 3.0 e 3.5 foram bem leves, o framework acabou de adquirir vários novos assemblies.O CLR e os assemblies da classe base principal não foram alterados.Muito.

O arquivo clr.dll incluído na versão 4.5 da estrutura ainda possui o número de versão 4.0.30319.O mesmo número de versão da versão 4.0 do CLR.E não tem problemas para executar aplicativos .NET direcionados à estrutura .NET 4.0.

Essa versão da estrutura, entretanto, foi fortemente modificada internamente.Ela adquiriu a projeção de linguagem que permite escrever aplicativos Metro executados no Windows 8 em uma linguagem gerenciada.Mudanças pesadas incluem mover classes de um assembly para outro, permitindo que a implantação em um telefone ou slate seja modesta.O arquivo app.exe.config adicionado ao seu projeto garante que o usuário tenha a versão necessária.A implantação do arquivo .config é opcional, mas o usuário verá uma mensagem de exceção bastante opaca quando tiver apenas o .NET 4.0 instalado.Na verdade, não tenho certeza de como é isso.A instalação automática que é acionada quando ele não tem o 4.5 provavelmente também não funciona.

Outras dicas

Embora Hans Passant esteja correto em tudo o que diz, ele perde um ponto-chave que é o papel do cabeçalho PE neste desastre.

Como o Dotnet 4.5 é uma instalação local sobre o Dotnet 4.0 e não atualiza o número de versão do Dotnet, o resultado é que os binários criados usando o Dotnet 4.5 têm o número de versão antigo do Dotnet 4.0 no cabeçalho PE do binário ( 4.0.30319).

Como o CLR usa esse valor no cabeçalho PE para determinar qual versão do Dotnet Framework carregar e como esse valor não muda para assemblies criados no Dotnet 4.5, na ausência de qualquer informação adicional, o CLR não tem como saber se um assembly com 4.0.30319 no cabeçalho PE requer link para Dotnet 4.0 ou 4.5.

É a presença do elemento SupportedRuntime em app.config que fornece essas informações extras ao CLR.Portanto, se você iniciar um aplicativo Dotnet 4.5 com a entrada SupportedRuntime presente em um sistema que tenha apenas o Dotnet 4.0 instalado, o CLR exibirá uma mensagem útil informando que você não possui a versão necessária do Dotnet instalada.Considerando que se você iniciar o mesmo aplicativo Dotnet 4.5 sem a entrada SupportedRuntime em um sistema que tenha apenas o Dotnet 4.0 instalado, o aplicativo poderá começar a ser executado, mas travar quando tentar usar um recurso do Dotnet 4.5 posteriormente.

Embora os projetos criados usando o VS2012 RC e direcionados ao Dotnet 4.5 possam ter a entrada SupportedRuntime ausente, os projetos criados usando o VS2012 RTM têm a entrada.

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