2015-11-15 89 views
0

我有一個C++項目,它構建了一個面向框架3.5的.NET類庫。無法將.NET C++類庫從VS 2008遷移到VS 2012

該項目自年齡以來一直無縫工作,可以使用C#應用程序等。它是用Visual Studio 2008 Professional開發的。

現在我需要遷移到Visual Studio 2012 Professional。我已成功轉換該項目。

我遇到了第一個問題,即目標框架無法從項目通用屬性中更改,該字段是隻讀的。

我可以通過編輯.vcxproj文件來插入TargetedFramework標籤來解決這個問題。新版本確實出現在「通用屬性」中。

我也能夠添加引用到庫需要的.NET程序集(只是系統,System.Drawing和System.Windows.Forms)。類庫正確編譯爲一個Dll,我可以在對象瀏覽器中看到它的內容。

現在,如果我嘗試使用它在應用程序下4目標框架的版本,我得到的消息

1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.Targets(1605,5): warning MSB3258: The primary reference "MyClasses" could not be resolved because it has an indirect dependency on the .NET Framework assembly "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which has a higher version "4.0.0.0" than the version "2.0.0.0" in the current target framework. 

我無法看到的間接引用可能來自(我明確提到了v2.0.50727,它似乎是2.0/3.0/3.5的文件版本)。

你有什麼解釋嗎?

+2

針對.NET 4是VS2012的一個難題,鏈接器發佈程序集引用。如果你的目標是3.5,那麼你必須繼續使用VS2008。 –

+0

這很奇怪。對於C#應用程序,您可以選擇從2.0到4.6的任何版本。你的意思是說這是VC++的限制嗎? –

+0

完全由設計決定,C++/CLI需要在CRT中使用與AppDomain相關的膠合代碼,以確保非託管狀態被正確初始化,由模塊初始化器完成。該代碼總是生成對mscorlib和System的引用,VS2010的4.0版本以上,你不能希望它。 –

回答

0

(對漢斯的正確意見擴大)

的Visual Studio支持通過啓動較早版本的C++編譯器的.NET多目標的C++/CLI語言。因此,語言特性與.NET框架依賴關係密不可分 - 使用較新的編譯器(Visual C++ 2010及更高版本),您可以獲得C++ 11和C++ 14功能以及.NET 4 ,使用較早的編譯器(Visual C++ 2008和之前的版本),您可以獲得.NET 2,但只有很少的C++ 11支持。

要控制這個,項目屬性中有一個平臺工具集選擇,但也需要一些手動項目文件編輯。

Visual C++團隊在Visual Studio 2010中編寫了一篇關於C++ Managed Multi-Targeting的博客文章...對於更高版本,請閱讀the documentation on MSDN

+1

謝謝。然後,我認爲使用以前的平臺工具集從VC2008或VC2010/2012直接構建...幾乎沒有什麼區別... –

+0

@YvesDaoust:微軟正準備發佈VS2015 Update 1,它具有一些非常酷的功能,可以使用它+舊版平臺工具集非常值得。但是對於2008年和2012年......是的,我同意,你使用的IDE並沒有太大的不同。 –

相關問題