2013-07-31 36 views
0

我有一個VS 2010解決方案,包含C++/CLI和C#項目的美味組合。 我決定進入VS 2012進一步發展。由於一些技術問題,C++/CLI項目無法升級。這給我造成了一些問題。我每晚都會編譯腳本,使用命令devenv來編譯上述解決方案。所有C++/CLI項目都無法編譯。VS 2012項目轉換問題

IDE在觸發時立即要求轉換所有項目。我說NO並編譯,一切正常。

我的調查:

我嘗試以下方法來了解究竟發生了什麼。 MSBUILD日誌詳細程度也增加了。在所有情況下,都使用了VS 2012命令提示符。

情況1:

的msbuild {C/CLI項目名稱}/T:重建

結果:

該項目編譯好並使用VS 2010編譯器。從日誌下面一行顯示:

創建「64 \調試\ Swift.Algorithms.unsuccessfulbuild」,因爲指定 「AlwaysCreate」。 ClCompile:C:\ Program Files文件 (x86)的\微軟的Visual Studio 10.0 \ VC \ BIN \ x86_amd64 \ CL.EXE

案例2:

devenv的{C++/CLI項目名稱} /重建 「{}配置」

結果:

該項目編譯好,並使用VS 2010編譯器。從日誌以下行表明:

1>使用從組件 「Microsoft.Build.CppTasks.x64, 版本= 4.0.0.0,文化=中性公鑰= b03f5f7f11d50a3a」 「CL」 的任務。 1>任務 「CL」 1>環境變量傳遞到工具:1>
VS_UNICODE_OUTPUT = 1512 1>C:\ Program Files文件(x86)的\微軟的Visual Studio的 10.0 \ VC \ BIN \ x86_amd64 \ CL.EXE

案例3:(那讓我很沮喪的一個)

devenv的{解決方案文件名} /重建 「{}配置」

的C++/CLI項目編譯失敗。 C#項目編譯正常。在這種情況下使用的C++編譯器是VS 2012版本。從日誌中的以下行顯示:

1>環境變量傳遞到工具:1> VS_UNICODE_OUTPUT = 1016 1> C:\ Program Files文件(x86)的\微軟的Visual Studio 11.0 \ VC \ BIN \ x86_amd64 \ CL.EXE/C

問題:

1)我看到,當單獨被用於編譯的項目文件MSBUILD非常聰明,使用正確的工具。使用什麼VS工具命令提示符(VS 2010或VS 2012)確實無關緊要。解決方案文件被調用時出了什麼問題?

2)我看到編譯我的產品的唯一方法是在解決方案文件造成麻煩時單獨編譯每個項目。這是一個已知的限制嗎?

我希望在這個問題上的任何投入。

+2

是否有任何令人信服的理由,使用'devenv'了'msbuild'?你有平臺工具設置正確嗎?即VS2010的人http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-69/7725.xptarget.png –

+1

我見過一些在我使用devenv代替msbuild的時候,我們產品的構建順序是不同的。 msbuild會使編譯失敗。之後沒有多少調查,因爲devenv工作正常。 – msiyer

+0

如果內存服務於我,那可能是因爲VS2005實際上並沒有基於MSBuild的項目(????),而MSBuild會從非MSBuild項目中創建臨時項目。 http://weblogs.asp.net/kdente/archive/2005/06/05/410432.aspx我想這將是一個複雜的過程得到正確的。所以,如果你使用VS2008 +也許是時候給MSBuild另一次嘗試了? –

回答

0

無論您是使用msbuilddevenv建築(我個人寧願msbuild)我會想象,至少,每一個Visual C++項目的Platform Toolset應設置爲Visual Studio 2010

Platform Toolset