Ändern Sie das C ++ / CLI-Projekt mit vs2010 in ein anderes Framework als 4.0

153

Da ich mein Projekt auf das Visual Studio 2010-Projektformat aktualisiert habe, ist mein C ++ / CLI-Projekt auf .net Framework 4.0 ausgerichtet.

Es ist einfach, die Framework-Version von einem C # -Projekt auf eine andere Version umzustellen, aber ich habe keine Ahnung, wie dies in einem C ++ / CLI-Projekt zu tun ist. Ich sehe keine Einstellung dafür auf den Projekteigenschaftsseiten.

Codymanix
quelle

Antworten:

190

Dies wird angezeigt, wenn Sie im Dialogfeld Framework und Referenzen F1 drücken:

Standardmäßig ist für neue Projekte das Zielframework auf .NET Framework 4 festgelegt. Die IDE unterstützt das Ändern des Zielframeworks nicht, Sie können es jedoch manuell ändern. In der Projektdatei (.vcxproj) wird das standardmäßige Zielframework durch das Eigenschaftselement v4.0 dargestellt. Um das Zielframework zu ändern, entladen Sie das Projekt, öffnen Sie die Projektdatei mit einem Texteditor und ändern Sie den Wert des Eigenschaftselements von v4.0 in eine andere Version, die auf Ihrem Server installiert ist. Wenn Sie beispielsweise v3.5 angeben, das .NET Framework v3.5 darstellt, muss Visual Studio 2008 SP1 installiert werden . Speichern und schließen Sie die Datei, laden Sie das Projekt neu und stellen Sie sicher, dass das Zielframework auf der Eigenschaftenseite angezeigt wird. *

Das ist bei konvertierten Projekten nicht besonders genau. Sie müssen das <TargetFrameworkVersion>Element selbst hinzufügen . Fügen Sie es in die PropertyGroup mit der Bezeichnung "Globals" ein:

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

Die Geschichte ist anders, wenn Sie VS2012 und höher verwenden, die erste Version von VS, die die Einstellung Platform Toolset auf der Eigenschaftenseite Allgemein erhalten hat. Sie müssen dann "v90" auswählen, um einen geeigneten Build für 3.5 zu erhalten. Es ist jedoch umständlich, dass Sie alle Zwischenversionen von VS auf dem Computer installiert haben müssen, damit diese Auswahl verfügbar ist.

Warum Sie VS2008 installieren müssen, muss selbst erklärt werden. Das Hauptproblem besteht darin, dass die C-Laufzeitbibliothek (msvcrt100.dll und höher) .NET-Code enthält, um die Ausführung von verwaltetem Code zu unterstützen. Das entscheidende Detail ist ein Modulinitialisierer, der sicherstellt, dass die CRT in einem Programm, das C ++ / CLI-Code verwendet, korrekt initialisiert wird. Dieser Code zielt immer auf .NET 4 ab, und da er fest in msvcrt100.dll (und höher) eingebettet ist, besteht immer eine grundsolide Abhängigkeit von der Laufzeit von v4.0.30319. Sie können immer nur eine reine v2.0.50727-Abhängigkeit haben, wenn Sie die alte C-Laufzeit msvcrt90.dll verwenden. Sie können nur dann sicher sein, dass Sie eine msvcrt90.dll-Abhängigkeit haben, wenn Sie die # include-Dateien des Compilers von VS2008 verwenden.

Kalte harte Tatsache, dass es ziemlich notwendig ist, bald auf .NET 4 umzusteigen, werden Sie mit solchen Build-Problemen zu kämpfen haben, wenn Sie dies nicht tun. Es gibt nur sehr wenige praktische Hindernisse. .NET 4 ist für alle Ziele, die Sie sich vorstellen können, kostenlos verfügbar. Die Überwindung der FUD, die mit der Umstellung auf eine höhere Laufzeitversion verbunden ist, ist im Allgemeinen nur das eigentliche Problem. Keine Gründe für Angst und Zweifel, es ist stabil.

Hans Passant
quelle
8
Ich habe jetzt diese Schritte ausgeführt, erhalte jedoch die Fehlermeldung "MSB8009: .NET Framework 2.0 / 3.0 / 3.5 zielt auf das Toolset der v90-Plattform ab. Stellen Sie sicher, dass Visual Studio 2008 auf dem Computer installiert ist". Ich habe kein VS2008.
Codymanix
8
Zitat aus meiner Antwort: "Visual Studio 2008 SP1 muss installiert sein". Ihnen fehlen die erforderlichen Build-Tools.
Hans Passant
2
Möglicherweise müssen Sie auch die .suo-Datei löschen und die Lösung erneut öffnen. Wie es in meinem Fall war.
Alehro
Ich habe dies einfach durch die Installation von Visual Studio 2008 Express (kostenlos) zum Laufen gebracht. Ich habe tatsächlich eine Menge Fehler bekommen, als ich das Plattform-Toolset auf v90 geändert habe. Zurück zu v100 haben sie alle behoben!
Simon.d
4
Wenn Sie .NET Framework 4.0-Programme erstellen, die gemischte C ++ / CLI- und C # -Projekte mit Visual Studio 2010 verwenden, führt die Installation von .NET Framework 4.5 (oder Visual Studio 2013, das mit .NET Framework 4.5 geliefert wird) zu C ++ / CLI-Projekten in VS 2010 soll gegen 4.5 statt früher 4.0 gebaut werden. Wenn Sie C # -Projekte haben, die gegen 4.0 in derselben Lösung erstellt wurden, die auf die C ++ / CLI-Projekte verweisen, bricht dies ab. Das Einfügen der <TargetFrameworkVersion> v4.0 </ TargetFrameworkVersion> in die vcxproj-Dateien der C ++ / CLI-Projekte löst dieses Problem. \ o /
Daniel Albuschat
18

Ja, es ist möglich, das Ziel auch für verwaltete C ++ - Projekte zu ändern:

Ändern des Ziels .NET Framework für C ++ / CLI (VS 2010) So ändern Sie die Version von .NET Framework für C ++ / CLI-Projekte (VS 2010)

Rechtsklick auf Projekt in Projektmappen - Explorer und klicken Sie auf Unload Projekt einen Rechtsklick auf unbelastetem Projekt in Projektmappen - Explorer und wählen Sie Bearbeiten <projectname>.vcxprojIm Projekt XML - Datei lokalisieren Knoten <PropertyGroup Label="Globals">In diesem Knoten lokalisieren Knoten <TargetFrameworkVersion>(wenn der Knoten nicht gefunden werden kann, fügen Sie es) Inner Text des Knotens definiert Zielrahmen. Es kann v2.0, v3.0, v3.5 oder v4.0 sein. Speichern Sie die vcxproj-Datei und schließen Sie sie. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das entladene Projekt und klicken Sie auf Projektbeispiel neu laden <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Hinweis: Diese Schritte gelten nur für Visual Studio 2010, da das neue Format von C ++ - Projektdateien verwendet wird.

Quelle auf MSDN: Gewusst wie: Ändern des Ziels .NET Framework

Brian R. Bondy
quelle
5

von einem anonymen Benutzer:

(Bearbeiten, da ich ein neuer Benutzer bin und nicht darauf antworten kann, kann jeder, der dies sieht, Folgendes einreichen.) Wenn Sie das Toolset auf v100 ändern, wird VS2010 tatsächlich auf .NET 4.0 ausgerichtet, obwohl es weiterhin als Ziel 3.5 in angezeigt wird Projekteigenschaften. VS2010 sollte wirklich eine Warnung darüber ausspucken, da es derzeit so aussieht, als könnten Sie .NET 3.5 mit dem v100-Toolset als Ziel festlegen, was Sie nicht können.

hakre
quelle
Dies liegt daran, dass Sie mit Multi-Targeting nur auf V2.0, 3.0, 3.5 und 4.0 zielen können. Die 1.x-Versionen von .Net können auf diese Weise nicht gezielt werden
Jeroen Landheer
0

Wenn das Toolset in VS 2010 installiert ist, gehen Sie zu Projekteigenschaften-> Konfigurationseigenschaften-> Allgemein und ändern Sie das Plattform-Toolset von Version 90 auf Version 100.

nche
quelle