您確定需要將目標框架設置爲2.0嗎?
不能2.0項目引用4.0項目(或任何轉換的項目)?
從周圍的MSBuild文件戳,命令似乎因爲Microsoft.CppBuild.targets
這些線的添加(我的機器上,位於C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0
下:
<ClCompile Condition="'@(ClCompile)' != '' and '$(CLRSupport)' != 'false' and '$(CLRSupport)' != ''">
<AdditionalUsingDirectories>$(TargetFrameworkDirectory);%(ClCompile.AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions Condition="('$(TargetFrameworkVersion)' == 'v3.5' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v2.0')">/d1clr:nostdlib %(ClCompile.AdditionalOptions)</AdditionalOptions>
<AdditionalOptions Condition="'$(TargetFrameworkVersion)' == 'v4.0'">/clr:nostdlib %(ClCompile.AdditionalOptions)</AdditionalOptions>
</ClCompile>
換句話說,它被添加,只是因爲你設置目標框架版本爲4.0以外的版本(如果已設置爲4.0,則會添加/clr:nostdlib
標誌)
我不知道爲什麼直接通過MSBuild調用時不起作用。它使用不同的編譯器版本(PATH
左右我其他的環境變量沒有正確設置,也許?)
當通過Visual Studio構建,它也調用MSBuild,所以真的,它應該沒有任何區別,你直接調用MSBuild,除非某些部分的環境設置不同。 (或者你用錯誤的標誌調用MSBuild)
當然,這些MSBuild文件沒有什麼「神奇」的東西,所以你可以修改它們,或者編輯你的項目來引用它們的單獨版本(你已經修改爲不插入標誌)。就是說,如果你忽略了XML混亂,那只是一個通用的構建系統。它沒有任何「內置」的VC++項目理解,超出了這些XML文件中指定的內容。
您提到了.NET 2.0中剩餘的C++項目。所有項目的目標是2.0,還是僅僅是C++的? –
@RMartinho:共享的幾個項目將不得不繼續瞄準2.0。所有的C++項目都是其中之一。 – sbi