Changer le projet C ++ / CLI vers un autre framework que 4.0 avec vs2010

153

Depuis que j'ai mis à niveau mon projet au format de projet Visual Studio 2010, mon projet C ++ / CLI est ciblé vers .net framework 4.0.

Il est facile de basculer la version du framework vers une autre version à partir d'un projet C #, mais je n'ai aucune idée de comment faire cela dans un projet C ++ / CLI, je ne vois aucun paramètre pour cela dans les pages de propriétés du projet.

codymanix
la source

Réponses:

190

Cela apparaît lorsque vous appuyez sur F1 dans la boîte de dialogue Framework et références:

Par défaut pour les nouveaux projets, le framework ciblé est défini sur .NET Framework 4. L'EDI ne prend pas en charge la modification du framework ciblé, mais vous pouvez le modifier manuellement. Dans le fichier projet (.vcxproj), le framework ciblé par défaut est représenté par l'élément de propriété v4.0. Pour modifier la structure ciblée, déchargez le projet, utilisez un éditeur de texte pour ouvrir le fichier de projet, puis modifiez la valeur de l'élément de propriété de v4.0 à une autre version installée sur votre serveur. Par exemple, si vous spécifiez v3.5, qui représente le .NET Framework v3.5, Visual Studio 2008 SP1 doit être installé . Enregistrez et fermez le fichier, rechargez le projet et vérifiez que le framework ciblé est affiché dans la page de propriétés. *

Ce n'est pas très précis sur les projets convertis, vous devrez ajouter l' <TargetFrameworkVersion>élément vous-même. Mettez-le dans le PropertyGroup intitulé "Globals":

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

L'histoire est différente lorsque vous utilisez VS2012 et plus, la première version de VS qui a acquis le paramètre Platform Toolset dans la page de propriétés Général. Vous devez ensuite sélectionner "v90" pour obtenir une version correcte qui cible la version 3.5. C'est cependant maladroit, vous devez avoir toutes les versions intermédiaires de VS installées sur la machine pour avoir cette sélection disponible.

Pourquoi vous avez besoin de VS2008 installé nécessite une explication en soi. Le problème principal est que la bibliothèque d'exécution C (msvcrt100.dll et versions ultérieures) contient du code .NET pour prendre en charge l'exécution de code managé. Le détail crucial est un initialiseur de module qui garantit que le CRT est correctement initialisé dans un programme qui utilise le code C ++ / CLI. Ce code cible toujours .NET 4 et comme il est intégré dans msvcrt100.dll (et plus), vous avez toujours une dépendance absolue sur le runtime v4.0.30319. Vous ne pouvez avoir une dépendance pure v2.0.50727 que lorsque vous utilisez l'ancien runtime C, msvcrt90.dll. Vous ne pouvez être sûr que vous avez une dépendance msvcrt90.dll lorsque vous utilisez les fichiers #include du compilateur de VS2008.

Froid dur fait qu'il est assez nécessaire de passer bientôt à .NET 4, vous aurez du mal avec des problèmes de construction comme celui-ci si vous ne le faites pas. Il y a très peu d'obstacles pratiques à cela, .NET 4 est largement disponible gratuitement sur toutes les cibles que vous imaginez. Surmonter le FUD associé au passage à une version d'exécution supérieure n'est généralement que le vrai problème. Aucune raison de peur et de doute, il est stable.

Hans Passant
la source
8
J'ai maintenant fait ces étapes mais maintenant j'obtiens l'erreur «MSB8009: .NET Framework 2.0 / 3.0 / 3.5 cible l'ensemble d'outils de la plate-forme v90. Veuillez vous assurer que Visual Studio 2008 est installé sur la machine». Je n'ai pas VS2008.
codymanix
8
Citation de ma réponse: "Visual Studio 2008 SP1 doit être installé". Il vous manque les outils de construction requis.
Hans Passant
2
Vous devrez peut-être également supprimer le fichier .suo et rouvrir la solution. Comme c'était le cas dans mon cas.
alehro
Je l'ai fait fonctionner simplement en installant Visual Studio 2008 express (gratuit). En fait, j'ai eu une tonne d'erreurs lorsque j'ai changé l'ensemble d'outils de la plate-forme en v90. Revenir à la v100 les a tous corrigés!
simon.d
4
Lors de la création de programmes .NET Framework 4.0 qui utilisent des projets mixtes C ++ / CLI et C # à l'aide de Visual Studio 2010, l'installation de .NET Framework 4.5 (ou Visual Studio 2013, fourni avec .NET Framework 4.5) conduit à des projets C ++ / CLI dans VS 2010 à construire contre 4.5 au lieu de 4.0 auparavant. Lorsque vous avez des projets C # qui sont construits avec 4.0 dans la même solution qui référencent les projets C ++ / CLI, cela s'arrête. L'insertion de <TargetFrameworkVersion> v4.0 </TargetFrameworkVersion> dans les fichiers vcxproj des projets C ++ / CLI résout ce problème. \ o /
Daniel Albuschat
18

Oui, il est possible de changer la cible même pour les projets C ++ gérés:

Modification de la cible .NET Framework pour C ++ / CLI (VS 2010) Pour modifier la version du .NET Framework pour les projets C ++ / CLI (VS 2010)

Cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et cliquez sur Décharger le projet Cliquez avec le bouton droit sur le projet déchargé dans l'Explorateur de solutions et sélectionnez Modifier <projectname>.vcxprojdans le fichier XML du projet, localiser le nœud <PropertyGroup Label="Globals">Dans ce nœud, localiser le nœud <TargetFrameworkVersion>(si le nœud est introuvable, ajoutez-le) Le texte intérieur du nœud définit cadre cible. Il peut s'agir de v2.0, v3.0, v3.5 ou v4.0 Enregistrez le fichier vcxproj et fermez-le.Cliquez avec le bouton droit sur le projet déchargé dans l'Explorateur de solutions et cliquez sur Recharger l'exemple de projet <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Remarque: ces étapes s'appliquent uniquement à Visual Studio 2010 car il utilise le nouveau format des fichiers de projet C ++.

Source sur MSDN: Comment: modifier la cible .NET Framework

Brian R. Bondy
la source
5

par un utilisateur anonyme:

(Si je suis un nouvel utilisateur et que je ne peux pas y répondre, quiconque voit cela, n'hésitez pas à soumettre ce qui suit) Changer le Toolset en v100 provoque en fait VS2010 pour cibler .NET 4.0, même s'il apparaîtra toujours comme ciblant 3.5 dans le propriétés du projet. VS2010 devrait vraiment cracher un avertissement à ce sujet, car actuellement, il semble que vous pensiez pouvoir cibler .NET 3.5 avec l'ensemble d'outils v100, ce que vous ne pouvez pas.

hakre
la source
En effet, le multi-ciblage vous permet uniquement de cibler V2.0, 3.0, 3.5 et 4.0; Les versions 1.x de .Net ne peuvent pas être ciblées de cette façon
Jeroen Landheer
0

Dans VS 2010, si l'ensemble d'outils est installé, accédez aux propriétés du projet -> propriétés de configuration -> général et modifiez Platform Toolset de v90 à v100.

nche
la source