Direcionando o .NET Framework 4.5 via Visual Studio 2010

169

Hoje instalei o .NET Framework 4.5 em minha máquina, esperando poder usá-lo no Visual Studio 2010, já que é apenas uma pequena atualização que não deve causar problemas para o Visual Studio 2010. Infelizmente, não estou, mesmo removendo manualmente alguns 4.0 e adicionar os 4.5 conjuntos correspondentes resultou nos conjuntos 4.0 originais ainda sendo referenciados no projeto.

É possível segmentar a versão 4.5 do Visual Studio 2010 e, em caso afirmativo, como? Eu realmente gostaria de usar as fitas ...

Golvellius
fonte
Você deve atualizar para o Visual Studio 2012 for .NET v4.5 support.
Arranjo
Conheci essa limitação quando estava tentando usar o método System.Threading.Tasks.Task.Run () em um aplicativo de console do VS 2010. Este método não aparece na classe Task se o seu projeto está direcionado ao .Net framework 4.0 e, em seguida, você percebe que o VS2010 não pode direcionar o .Net framework 4.5, se desejar.
RBT

Respostas:

194

Cada versão do Visual Studio anterior ao Visual Studio 2010 está vinculada a uma estrutura .NET específica. (O VS2008 é o .NET 3.5, o VS2005 é o .NET 2.0, o VS2003 é o .NET1.1) O Visual Studio 2010 e posteriores permitem o direcionamento de versões anteriores da estrutura, mas não podem ser usados ​​em versões futuras. Você deve usar o Visual Studio 2012 para utilizar o .NET 4.5.

Brad S
fonte
9
Não é inteiramente verdade - o .NET 3.0 foi lançado entre as versões do VS e pode ser usado no VS2005.
Sly Gryphon
9
Que enigma: migrar para o vs2012 + para utilizar um detalhe do .net 4.5 com o custo de perder o amado projeto de instalação do vs2010 para implantar instaladores msi ... "upgrade" parece mais um desvio ...
ecoe
6
@ecoe - Há um VS 2013 extensão que traz de volta o Setup & Deployment tipo de projeto: visualstudiogallery.msdn.microsoft.com/...
ajawad987
2
Isto está incorreto. Você não precisa atualizar para usar este recurso. Tudo que você precisa fazer é adicionar uma nova referência e, em seguida, navegue até a pasta .NET 4.5: C: \ Arquivos de Programas (x86) \ Assemblies de Referência \ Microsoft \ Framework \\. Net Framework \ 4.5. Você encontrará a referência lá. Basta adicionar e ele funciona
Hermes Trismegisto
2
@HermesTrismegistus no VS 2010 Clico em "Target Framework = Install Other Frameworks" e ele me leva a um site microsoft.com/net/download/visual-studio-sdks Ele não me permite navegar para nenhuma pasta. O que devo fazer. eu devo poder alvejar 4.5 do VS 2010. Tks.
Echeban
67

Existem cenários bastante limitados nos quais posso pensar onde isso seria útil, mas vamos supor que você não possa obter fundos para comprar o VS2012 ou algo nesse sentido. Se esse for o caso, e você tiver o Windows 7+ e o VS 2010, poderá usar o seguinte hack que montei, o que parece funcionar (mas ainda não implantei totalmente um aplicativo usando esse método).

  1. Faça backup do seu arquivo de projeto !!!

  2. Baixe e instale o Windows 8 SDK, que inclui o .NET 4.5 SDK.

  3. Abra seu projeto no VS2010.

  4. Crie um arquivo de texto em seu projeto nomeado Compile_4_5_CSharp.targetscom o seguinte conteúdo. (Ou faça o download aqui - Não se esqueça de remover a extensão ".txt" do nome do arquivo):

    <Project DefaultTargets="Build"
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
        <!-- Change the target framework to 4.5 if using the ".NET 4.5" configuration -->
        <PropertyGroup Condition=" '$(Platform)' == '.NET 4.5' ">
            <DefineConstants Condition="'$(DefineConstants)'==''">
                TARGETTING_FX_4_5
            </DefineConstants>
            <DefineConstants Condition="'$(DefineConstants)'!='' and '$(DefineConstants)'!='TARGETTING_FX_4_5'">
                $(DefineConstants);TARGETTING_FX_4_5
            </DefineConstants>
            <PlatformTarget Condition="'$(PlatformTarget)'!=''"/>
            <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
        </PropertyGroup>
    
        <!-- Import the standard C# targets -->
        <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    
        <!-- Add .NET 4.5 as an available platform -->
        <PropertyGroup>
           <AvailablePlatforms>$(AvailablePlatforms),.NET 4.5</AvailablePlatforms>
        </PropertyGroup>
    </Project>
    
  5. Descarregue seu projeto (clique com o botão direito do mouse -> descarregar).

  6. Edite o arquivo do projeto (clique com o botão direito do mouse -> Editar * .csproj).

  7. Faça as seguintes alterações no arquivo do projeto:

    uma. Substitua o padrão Microsoft.CSharp.targetspelo arquivo de destino criado na etapa 4

    <!-- Old Import Entry -->
    <!-- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> -->
    
    <!-- New Import Entry -->
    <Import Project="Compile_4_5_CSharp.targets" />
    

    b. Mude a plataforma padrão para.NET 4.5

    <!-- Old default platform entry -->
    <!-- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> -->
    
    <!-- New default platform entry -->
    <Platform Condition=" '$(Platform)' == '' ">.NET 4.5</Platform>
    

    c. Adicione AnyCPUplataforma para permitir o direcionamento de outras estruturas, conforme especificado nas propriedades do projeto. Isso deve ser adicionado logo antes da primeira <ItemGroup>tag no arquivo

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Salve suas alterações e feche o *.csprojarquivo.

  9. Recarregue seu projeto (clique com o botão direito do mouse -> Recarregar Projeto).

  10. No gerenciador de configuração (Build -> Configuration Manager), verifique se a plataforma ".NET 4.5" está selecionada para o seu projeto.

  11. Ainda no gerenciador de configuração, crie uma nova plataforma de solução para ".NET 4.5" (você pode basear-se em "Qualquer CPU") e verifique se ".NET 4.5" está selecionado para a solução.

  12. Crie seu projeto e verifique se há erros.

  13. Assumindo que a compilação foi concluída, você pode verificar se realmente está direcionando o 4.5 adicionando uma referência a uma classe específica do 4.5 ao seu código-fonte:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. Quando você compila usando a plataforma ".NET 4.5", a compilação deve ter êxito. Ao compilar na plataforma "Qualquer CPU", você deve receber um erro do compilador:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in
    the namespace 'System.Reflection' (are you missing an assembly reference?)
    
David Woodward
fonte
3
isso é krazy, mesmo que funcionasse, elementos da interface do usuário, como o designer de faixa de opções, funcionariam sem grandes quantidades de xaml e outros erros? srsly basta atualizar.
Tipo anônimo
1
Além da resposta de David Woodward, adicionei: <OutputPath>bin\</OutputPath>ao primeiro PropertyGroup, quando ocorreu o erro abaixo: A propriedade OutputPath não está definida para o projeto 'nome do projeto'.
precisa saber é
Isso realmente funciona. Mas estou apenas usando-o para poder continuar executando Moles no VS2010 após a instalação do .NET Framework 4.5.1.
Conrad Clark
1
Não consegui descobrir como executar com êxito a etapa 11, "... criar uma nova plataforma de solução ...", mas descobri que as instruções tiveram êxito geral se a etapa 11 for ignorada.
precisa saber é o seguinte
8

Para sua informação, se você deseja criar um pacote do Instalador no VS2010, infelizmente ele é direcionado apenas para o .NET 4. Para contornar isso, você deve adicionar o NET 4.5 como uma condição de inicialização.

Adicione o seguinte nas condições de inicialização do instalador (clique com o botão direito do mouse em Exibir, condições de inicialização).

Em "Search Target Machine", clique com o botão direito do mouse e selecione "Add Registry Search".

Property: REGISTRYVALUE1
RegKey: Software\Microsoft\NET Framework Setup\NDP\v4\Full
Root: vsdrrHKLM
Value: Release

Adicione uma nova "Condição de inicialização":

Condition: REGISTRYVALUE1>="#378389"
InstallUrl: http://www.microsoft.com/en-gb/download/details.aspx?id=30653
Message: Setup requires .NET Framework 4.5 to be installed.

Onde:

378389 = .NET Framework 4.5

378675 = .NET Framework 4.5.1 instalado com o Windows 8.1

378758 = .NET Framework 4.5.1 instalado no Windows 8, Windows 7 SP1 ou Windows Vista SP2

379893 = .NET Framework 4.5.2

Referência da condição de inicialização: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx

ciberenergia
fonte
3

Tenho lutado com a integração do VS2010 / DNFW 4.5 e finalmente consegui isso. A partir do VS 2008, foi introduzido um cache de assemblies usado pelo Visual Studio chamado "Assemblies Referenciados". Esse cache de arquivo para o VS 2010 está localizado em \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. O Visual Studio carrega os assemblies de estrutura desse local em vez do diretório de instalação do framework. Quando a Microsoft diz que o VS 2010 não oferece suporte ao DNFW 4.5, o que eles significam é que esse diretório não é atualizado quando o DNFW 4.5 é instalado. Depois de substituir os arquivos nesse local pelos arquivos DNFW 4.5 atualizados, você descobrirá que o VS 2010 funcionará felizmente com o DNFW 4.5.

Capt Nasty
fonte
0

De outra pesquisa. Trabalhou para mim!

"Você pode usar o Visual Studio 2010 e ele suporta, desde que o seu sistema operacional suporte o .NET 4.5.

Clique com o botão direito do mouse na sua solução para adicionar uma referência (como você faz). Quando a caixa de diálogo aparecer, selecione procurar e navegue até a seguinte pasta:

C: \ Arquivos de programas (x86) \ Assemblies de referência \ Microsoft \ Framework \ .Net Framework \ 4.5

Você encontrará lá. "

Hermes Trismegistus
fonte
6
Na frase "Você encontrará lá", o que é "isso"? Qual arquivo nessa pasta selecionamos? Um deles nos permitirá direcionar o .net 4.5 no VS 2010?
Jeff Roe
Você encontrará os assemblies de namespace. Você pode adicionar o que quiser. Por exemplo, eu precisava usar um método para trabalhar com arquivos ZIP. Então eu encontrei a dll "System.IO.Compression.dll" e a adicionei ao meu projeto. Então, eu poderia listar explicitamente o espaço para nome no meu código e usar os métodos necessários.
Hermes Trismegistus
1
Isso não funciona para mim. Se você remover sua referência a, digamos, System, e depois procurar o .Net 4.5 System.dll e adicionar isso como referência, o VS ainda seleciona a resposta 4.0 System.dll Capt Nasty nesta página funciona para mim, por exemplo, copiar System.dll de C: \ Arquivos de programas (x86) \ Assemblies de referência \ Microsoft \ Framework \ .NETFramework \ v4.6 e solte-o sobre System.dll em C: \ Arquivos de programas (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0. Observe, porém, que esse é um truque desagradável e pode ter consequências não intencionais.
Jinlye