3

我有許多針對.Net 4.6和一個本地C++項目(無CLR)的C#項目的解決方案。在VS2015中使用該解決方案後,我現在在嘗試打開VS2013中的解決方案時出現錯誤,一半項目未能加載。對於VS2013中的.Net 4.6的某些項目,項目加載失敗

本地C++項目和一些C#項目給出錯誤:

error : A numeric comparison was attempted on "$(TargetPlatformVersion)" that evaluates to "10.0.10069.0" instead of a number, in condition "'$(TargetPlatformVersion)' > '8.0'". C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets

我不知道爲什麼有些項目正確加載和其他人不這樣做,但是,它看起來像所有的C#項目哪些參考NuGet包失敗。

有沒有辦法解決這些錯誤,並允許在VS2013和VS2015中打開解決方案和項目?

回答

2

在嘗試對項目文件進行各種更改後,我發現從本機C++項目中刪除以下行,然後允許解決方案中的所有項目正確加載。

<TargetPlatformVersion>10.0.10069.0</TargetPlatformVersion> 

然而,加載後我隨後發現,我無法建立,因爲錯誤的本地項目:

error MSB8020: The build tools for v140 (Platform Toolset = 'v140') cannot be found.

即使vcxproj指定ToolsVersion="14.0"看來,Visual Studio的2013年將使用12.0對於C++項目。在項目的屬性Platform toolsetv140 (not installed)。將其更改爲Visual Studio 2013 (v120)將允許在VS2013和VS2015中構建項目,但顯然使用較舊的12.0工具而不是14.0。相反,我添加了以下行到我的項目文件:

<PlatformToolset Condition="'$(VisualStudioVersion)' == '12.0'">v120</PlatformToolset> 
<PlatformToolset Condition="'$(VisualStudioVersion)' >= '14.0'">v140</PlatformToolset> 

現在VS2013將使用v120Platform toolset和VS2105(或更高版本)將使用v140

使用VS 2015構建項目文件後,可能會添加TargetPlatformVersion和/或WindowsTargetPlatformVersion行。如果值爲10.0.10240.0或另一個Windows 10版本,則該項目不會在VS 2013中加載,因爲它不喜歡非十進制值。 即使你可以用VS2013面向.NET 4.6它不會:這可以通過將值更改爲8.1,告訴Visual Studio中使用Windows工具包的Windows 8.1,而比Windows 10

注固定了解C#6,如果您嘗試使用任何新的語言功能,將會出現錯誤。同樣,針對C++項目定位v120將阻止您使用VS2015中支持的更新語言功能。

+1

此答案主要針對C++。我遇到了同樣的C#錯誤消息,其中之前不成功的更新可能會損壞MSBuild 12.修復程序是修復Visual Studio 2013 Update 5. –

+0

我可以刪除WindowsTargetPlatformVersion嗎? – lindexi