Zmień projekt C ++ / CLI na inny framework niż 4.0 z vs2010

153

Odkąd zaktualizowałem swój projekt do formatu projektu Visual Studio 2010, mój projekt C ++ / CLI jest skierowany do .NET Framework 4.0.

Łatwo jest przełączyć wersję frameworka na inną wersję z projektu C #, ale nie mam pojęcia, jak to zrobić w projekcie C ++ / CLI, nie widzę ustawienia tego na stronach właściwości projektu.

codymanix
źródło

Odpowiedzi:

190

Pojawia się po naciśnięciu klawisza F1 w oknie dialogowym Struktura i odwołania:

Domyślnie dla nowych projektów docelowa struktura jest ustawiona na .NET Framework 4. Środowisko IDE nie obsługuje modyfikowania docelowej platformy, ale można ją zmienić ręcznie. W pliku projektu (.vcxproj) domyślna platforma docelowa jest reprezentowana przez element właściwości w wersji 4.0. Aby zmienić platformę docelową, zwolnij projekt, otwórz plik projektu za pomocą edytora tekstu, a następnie zmień wartość elementu właściwości z wersji 4.0 na inną wersję zainstalowaną na serwerze. Na przykład, jeśli określono wersję 3.5, która reprezentuje .NET Framework w wersji 3.5, musi być zainstalowany dodatek Visual Studio 2008 SP1 . Zapisz i zamknij plik, ponownie załaduj projekt i sprawdź, czy docelowa platforma jest wyświetlana na stronie właściwości. *

To nie jest zbyt dokładne w przekonwertowanych projektach, musisz sam dodać ten <TargetFrameworkVersion>element. Umieść go w PropertyGroup oznaczonym jako „Globals”:

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

Sytuacja wygląda inaczej, gdy używasz VS2012 i nowszych wersji, pierwszej wersji VS, która uzyskała ustawienie zestawu narzędzi platformy na stronie właściwości Ogólne. Następnie musisz wybrać wersję „v90”, aby uzyskać poprawną kompilację przeznaczoną dla wersji 3.5. Jest to jednak niezgrabne, musisz mieć wszystkie pośrednie wersje VS zainstalowane na komputerze, aby mieć dostęp do tego wyboru.

Dlaczego potrzebujesz zainstalowanego VS2008, wymaga samego wyjaśnienia. Podstawowym problemem jest to, że biblioteka wykonawcza języka C (msvcrt100.dll i nowsze) zawiera kod .NET do obsługi wykonywania kodu zarządzanego. Kluczowym szczegółem jest inicjator modułu, który zapewnia, że ​​CRT jest poprawnie zainicjowany w programie, który używa kodu C ++ / CLI. Ten kod zawsze jest przeznaczony dla platformy .NET 4, a ponieważ jest wbudowany w plik msvcrt100.dll (i nowszych), zawsze istnieje duża zależność od środowiska wykonawczego v4.0.30319. Czysta zależność v2.0.50727 może istnieć tylko wtedy, gdy używasz starego środowiska wykonawczego C, msvcrt90.dll. Możesz mieć pewność, że istnieje zależność msvcrt90.dll tylko wtedy, gdy używasz plików #include kompilatora VS2008.

Fakt, że przejście na platformę .NET 4 jest bardzo konieczne, będzie wkrótce konieczne, więc jeśli tego nie zrobisz, będziesz mieć problemy z kompilacją. Jest na to bardzo mało praktycznych przeszkód, .NET 4 jest powszechnie dostępny za darmo dla wszystkich celów, jakie można sobie wyobrazić. Przezwyciężenie FUD, które jest związane z przejściem na wyższą wersję runtime, jest generalnie tylko prawdziwym problemem. Bez powodów do strachu i wątpliwości, jest stabilny.

Hans Passant
źródło
8
Teraz wykonałem te czynności, ale teraz pojawia się błąd „MSB8009: .NET Framework 2.0 / 3.0 / 3.5 jest przeznaczony dla zestawu narzędzi platformy v90. Upewnij się, że na komputerze jest zainstalowany program Visual Studio 2008”. Nie mam VS2008.
codymanix
8
Cytuj z mojej odpowiedzi: „Musi być zainstalowany dodatek SP1 dla programu Visual Studio 2008”. Brakuje wymaganych narzędzi do kompilacji.
Hans Passant
2
Być może będziesz musiał również usunąć plik .suo i ponownie otworzyć rozwiązanie. Tak jak było w moim przypadku.
alehro
Mam to działające po prostu instalując Visual Studio 2008 express (bezpłatnie). Właściwie dostałem mnóstwo błędów, kiedy zmieniłem zestaw narzędzi platformy na v90. Powrót do wersji 100 naprawił je wszystkie!
simon.d
4
Podczas tworzenia programów .NET Framework 4.0, które używają mieszanych projektów C ++ / CLI i C # przy użyciu Visual Studio 2010, zainstalowanie .NET Framework 4.5 (lub Visual Studio 2013, który jest dostarczany z .NET Framework 4.5) prowadzi do C ++ / CLI-projektów w VS 2010 ma być zbudowany w porównaniu z 4.5 zamiast wcześniej 4.0. Jeśli masz projekty C #, które są skompilowane dla wersji 4.0 w tym samym rozwiązaniu, które odwołują się do projektów C ++ / CLI, jest to przerywane. Wstawienie <TargetFrameworkVersion> v4.0 </TargetFrameworkVersion> do plików vcxproj projektów C ++ / CLI rozwiązuje ten problem. \ o /
Daniel Albuschat
18

Tak, można zmienić cel nawet dla zarządzanych projektów C ++:

Zmiana docelowego .NET Framework dla C ++ / CLI (VS 2010) Aby zmienić wersję .NET Framework dla projektów C ++ / CLI (VS 2010)

Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i kliknij Zwolnij projekt Kliknij prawym przyciskiem myszy zwolniony projekt w Eksploratorze rozwiązań i wybierz opcję Edycja <projectname>.vcxprojW pliku XML zlokalizuj węzeł <PropertyGroup Label="Globals">W tym węźle zlokalizuj węzeł <TargetFrameworkVersion>(jeśli nie można znaleźć węzła, dodaj go) Wewnętrzny tekst węzła definiuje ramy docelowe. Może to być v2.0, v3.0, v3.5 lub v4.0 Zapisz plik vcxproj i zamknij go Kliknij prawym przyciskiem myszy rozładowany projekt w Eksploratorze rozwiązań i kliknij Wczytaj ponownie przykład projektu <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Uwaga: te kroki dotyczą tylko programu Visual Studio 2010, ponieważ używa nowego formatu plików projektu C ++.

Źródło w witrynie MSDN: instrukcje: zmiana docelowej platformy .NET Framework

Brian R. Bondy
źródło
5

przez anonimowego użytkownika:

(Edytowanie, ponieważ jestem nowym użytkownikiem i nie mogę na to odpowiedzieć, każdy, kto to widzi, może przesłać następujące informacje) Zmiana zestawu narzędzi na wersję 100 faktycznie powoduje, że VS2010 jest ukierunkowany na .NET 4.0, mimo że nadal będzie wyświetlany jako docelowy 3.5 w właściwości projektu. VS2010 powinien naprawdę wypluć ostrzeżenie o tym, ponieważ obecnie wydaje się, że możesz celować w .NET 3.5 za pomocą zestawu narzędzi v100, czego nie możesz.

hakre
źródło
Dzieje się tak, ponieważ kierowanie na wiele osób umożliwia kierowanie tylko na wersję 2.0, 3.0, 3.5 i 4.0; Nie można w ten sposób
kierować reklam do wersji 1.x.Net
0

W VS 2010, jeśli zestaw narzędzi jest zainstalowany, przejdź do właściwości projektu-> właściwości konfiguracji-> ogólne i zmień zestaw narzędzi platformy z v90 na v100.

nche
źródło