我有一个解决方案,其中包含许多针对.Net 4.6和一个本机C ++项目(无CLR)的C#项目。在VS2015上使用该解决方案后,我尝试在VS2013中打开解决方案时出现错误,其中一半项目无法加载。
本机C ++项目和一些C#项目会出错:
错误:尝试对“$(TargetPlatformVersion)”进行数值比较,评估为“10.0.10069.0”而不是数字,条件为“'$(TargetPlatformVersion)'>'8.0'”。 C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets
我不确定为什么某些项目正确加载而其他项目没有正确加载,但是,它确实看起来像所有引用NuGet包的C#项目都失败了。
有没有办法解决这些错误并允许在VS2013和VS2015中打开解决方案和项目?
答案 0 :(得分:2)
在尝试对项目文件进行各种更改后,我发现从本机C ++项目中删除以下行然后允许正确加载解决方案中的所有项目。
<TargetPlatformVersion>10.0.10069.0</TargetPlatformVersion>
然而,在加载后我发现由于错误我无法构建本机项目:
错误MSB8020:无法找到v140(平台工具集=&#39; v140&#39;)的构建工具。
即使vcxproj指定ToolsVersion="14.0"
,似乎Visual Studio 2013将使用12.0进行C ++项目。在项目的属性中,Platform toolset
表示v140 (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将使用v120
Platform toolset
,VS2105(及更高版本)将使用v140
。
使用VS 2015构建后,项目文件可能会添加TargetPlatformVersion
和/或WindowsTargetPlatformVersion
行。如果值为10.0.10240.0
或其他Windows 10版本,则项目不会在VS 2013中加载,因为它不喜欢非十进制值。这可以通过将值更改为8.1
来解决,告诉Visual Studio使用Windows Kit for Windows 8.1而不是Windows 10。
注意:强>
即使您可以使用VS2013将.Net 4.6作为目标,但它并不了解C#6,因此如果您尝试使用任何新的语言功能,将会出错。同样,针对C ++项目定位v120
会阻止您使用VS2015中支持的更新语言功能。