Altere o projeto C ++ / CLI para outra estrutura que não a 4.0 com vs2010

153

Desde que atualizei meu projeto para o formato de projeto do visual studio 2010, meu projeto C ++ / CLI está direcionado para o .net framework 4.0.

É fácil mudar a versão da estrutura para outra versão de um projeto C #, mas não tenho idéia de como fazer isso em um projeto C ++ / CLI, não vejo nenhuma configuração para isso nas páginas de propriedades do projeto.

codymanix
fonte

Respostas:

190

Isso aparece quando você pressiona F1 na caixa de diálogo Framework and References:

Por padrão, para novos projetos, a estrutura de destino é definida como .NET Framework 4. O IDE não oferece suporte à modificação da estrutura de destino, mas você pode alterá-lo manualmente. No arquivo do projeto (.vcxproj), a estrutura de destino padrão é representada pelo elemento de propriedade v4.0. Para alterar a estrutura de destino, descarregue o projeto, use um editor de texto para abrir o arquivo do projeto e altere o valor do elemento de propriedade da v4.0 para outra versão instalada no servidor. Por exemplo, se você especificar a v3.5, que representa o .NET Framework v3.5, o Visual Studio 2008 SP1 deverá estar instalado . Salve e feche o arquivo, recarregue o projeto e verifique se a estrutura de destino é exibida na página de propriedades. *

Isso não é muito preciso em projetos convertidos; você precisará adicionar o <TargetFrameworkVersion>elemento por conta própria. Coloque-o no PropertyGroup chamado "Globals":

  <PropertyGroup Label="Globals">
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <others...>
  </PropertyGroup>

A história é diferente quando você usa o VS2012 e superior, a primeira versão do VS que adquiriu a configuração Platform Toolset na página de propriedades Geral. Você deve selecionar "v90" para obter uma compilação adequada que atinja 3.5. No entanto, é desajeitado, você deve ter todas as versões intermediárias do VS instaladas na máquina para ter essa seleção disponível.

Por que você precisa do VS2008 instalado requer uma explicação por si só. O principal problema é que a biblioteca de tempo de execução C (msvcrt100.dll e superior) contém código .NET para oferecer suporte à execução gerenciada de código. O detalhe crucial é um inicializador de módulo que garante que o CRT seja inicializado corretamente no programa que usa o código C ++ / CLI. Esse código sempre tem como alvo o .NET 4 e, como é embutido no msvcrt100.dll (e acima), você sempre tem uma dependência bastante forte do tempo de execução da v4.0.30319. Você só pode ter uma dependência pura da v2.0.50727 ao usar o tempo de execução C antigo, msvcrt90.dll. Você só pode ter certeza de que possui uma dependência msvcrt90.dll ao usar os arquivos #include do VS2008 do compilador.

Embora seja bastante necessário mudar para o .NET 4 em breve, você terá problemas de compilação como esse, se não o fizer. Existem muito poucos obstáculos práticos para isso, o .NET 4 está amplamente disponível gratuitamente em todos os destinos que você imagina. Superar o FUD associado à mudança para uma versão de tempo de execução mais alta geralmente é apenas o problema real. Não há razões para medo e dúvida, é estável.

Hans Passant
fonte
8
Agora, executei essas etapas, mas agora recebo o erro "MSB8009: .NET Framework 2.0 / 3.0 / 3.5 direcionado ao conjunto de ferramentas da plataforma v90. Verifique se o Visual Studio 2008 está instalado na máquina". Eu não tenho o VS2008.
Codymanix 28/05
8
Citação da minha resposta: "O Visual Studio 2008 SP1 deve estar instalado". Estão faltando as ferramentas de construção necessárias.
Hans Passant
2
Pode ser que você também precise excluir o arquivo .suo e reabrir a solução. Como foi no meu caso.
alehro
Eu consegui esse trabalho simplesmente instalando o Visual Studio 2008 express (gratuito). Na verdade, recebi muitos erros quando mudei o conjunto de ferramentas da plataforma para a v90. Voltando à v100, corrigimos todos eles!
simon.d
4
Ao criar programas do .NET Framework 4.0 que usam projetos mistos de C ++ / CLI e C # usando o Visual Studio 2010, a instalação do .NET Framework 4.5 (ou Visual Studio 2013, que acompanha o .NET Framework 4.5) leva a projetos C ++ / CLI em O VS 2010 deve ser construído com base no 4.5, em vez do 4.0. Quando você tem projetos em C # criados com o 4.0 na mesma solução que faz referência aos projetos C ++ / CLI, isso é interrompido. A inserção de <TargetFrameworkVersion> v4.0 </TargetFrameworkVersion> nos arquivos vcxproj dos projetos C ++ / CLI resolve esse problema. \ o /
Daniel Albuschat
18

Sim, é possível alterar o destino, mesmo para projetos C ++ gerenciados:

Alterando o .NET Framework de destino para C ++ / CLI (VS 2010) Para alterar a versão dos projetos .NET Framework para C ++ / CLI (VS 2010)

Clique com o botão direito do mouse no projeto no Solution Explorer e clique em Descarregar projeto. Clique com o botão direito do mouse no projeto descarregado no Solution Explorer e selecione Editar <projectname>.vcxprojno arquivo XML do projeto. Nó de localização <PropertyGroup Label="Globals">Nesse nó, localize o nó <TargetFrameworkVersion>(se o nó não puder ser encontrado, adicione-o) estrutura de metas. Pode ser v2.0, v3.0, v3.5 ou v4.0 Salve o arquivo vcxproj e feche-o Clique com o botão direito do mouse no projeto descarregado no Solution Explorer e clique em Recarregar Exemplo de Projeto <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Nota: Essas etapas se aplicam apenas ao Visual Studio 2010, pois ele usa o novo formato de arquivos de projeto do C ++.

Origem no MSDN: Como: Alterar o .NET Framework de Destino

Brian R. Bondy
fonte
5

por um usuário anônimo:

(Editar como eu sou um novo usuário e não posso responder a isso, quem quer que esteja à vontade para enviar o seguinte) Alterar o conjunto de ferramentas para v100 realmente faz com que o VS2010 direcione o .NET 4.0, mesmo que ele ainda apareça como direcionamento 3.5 no propriedades do projeto. O VS2010 realmente deve emitir um aviso sobre isso, porque atualmente parece que você pode direcionar o .NET 3.5 com o conjunto de ferramentas v100, o que não é possível.

hakre
fonte
Isso ocorre porque a segmentação múltipla permite apenas segmentar V2.0, 3.0, 3.5 e 4.0; Os 1.x versões do .Net não pode ser alvo desta forma
Jeroen Landheer
0

No VS 2010, se o conjunto de ferramentas estiver instalado, vá para propriedades do projeto-> propriedades da configuração-> geral e altere o Platform Toolset da v90 para a v100.

nche
fonte