Dot-Net

使用 vs2010 將 C++/CLI 項目更改為 4.0 以外的另一個框架

  • May 27, 2010

由於我將我的項目升級到了 Visual Studio 2010 項目格式,因此我的 C++/CLI 項目針對 .net framework 4.0。

將框架版本從 C# 項目切換到另一個版本很容易,但我不知道如何在 C++/CLI 項目中執行此操作,我在項目屬性頁中看不到此設置。

當您在“框架和引用”對話框中按 F1 時,會顯示此資訊:

預設情況下,新項目的目標框架設置為 .NET Framework 4。IDE 不支持修改目標框架,但您可以手動更改。在項目文件 (.vcxproj) 中,預設目標框架由 v4.0 屬性元素表示。要更改目標框架,請解除安裝項目,使用文本編輯器打開項目文件,然後將屬性元素的值從 v4.0 更改為安裝在伺服器上的另一個版本。例如,如果您指定代表 .NET Framework v3.5 的 v3.5,則必須安裝 Visual Studio 2008 SP1。保存並關閉文件,重新載入項目,並驗證目標框架是否顯示在屬性頁中。*

這在轉換後的項目中並不是非常準確,您必須<TargetFrameworkVersion>自己添加元素。將其放入標有“Globals”的 PropertyGroup 中:

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

當您使用 VS2012 及更高版本時,情況會有所不同,這是 VS 的第一個版本,它在 General 屬性頁面中獲取了 Platform Toolset 設置。然後,您必須選擇“v90”以獲得針對 3.5 的正確建構。然而,它很笨拙,您必須在機器上安裝所有中間版本的 VS 才能使用該選項。

為什麼需要安裝 VS2008 需要單獨解釋。核心問題是 C 執行時庫(msvcrt100.dll 及更高版本)包含支持託管程式碼執行的 .NET 程式碼。關鍵細節是一個模組初始化程序,它確保 CRT 在使用 C++/CLI 程式碼的程序中正確初始化。該程式碼始終以 .NET 4 為目標,並且由於它被硬烘焙到 msvcrt100.dll(及更高版本)中,因此您始終對 v4.0.30319 執行時具有堅如磐石的依賴關係。當您使用舊的 C 執行時 msvcrt90.dll 時,您只能擁有純 v2.0.50727 依賴項。只有在使用 VS2008 的編譯器的#include 文件時,才能確定有 msvcrt90.dll 依賴。

冷酷的事實是很快遷移到 .NET 4 是非常必要的,如果你不這樣做,你會遇到這樣的建構問題。這幾乎沒有什麼實際障礙,.NET 4 可以在您想像的所有目標上免費廣泛使用。克服與遷移到更高執行時版本相關的 FUD 通常只是真正的問題。沒有理由害怕和懷疑,它是穩定的。

引用自:https://stackoverflow.com/questions/2921702