我有一个解决方案,有一些c#项目针对。net 4.6和一个本地c++项目(没有CLR)。在使用VS2015解决方案后,我现在在试图在VS2013中打开解决方案时出现错误,其中一半的项目无法加载。
本地c++项目和一些c#项目给出错误:
错误:在"$(TargetPlatformVersion) '> '8.0'"条件下,试图对"$(TargetPlatformVersion)"进行数值比较,其计算结果为"10.0.10069.0"而不是数字。C:Program Files (x86)MSBuild12.0bin Microsoft.Common.CurrentVersion.targets
我不知道为什么有些项目正确加载,而另一些则没有,但是,它看起来像所有引用NuGet包的c#项目都失败了。
是否有一种方法来修复这些错误,并允许在VS2013和VS2015中打开解决方案和项目?
在尝试了对项目文件的各种更改之后,我发现从本地c++项目中删除以下行可以使解决方案中的所有项目正确加载。
<TargetPlatformVersion>10.0.10069.0</TargetPlatformVersion>
然而,在加载之后,我发现我无法构建本机项目,因为错误:
错误MSB8020:无法找到v140的构建工具(Platform Toolset = 'v140')。
尽管vcxproj指定了ToolsVersion="14.0"
,但似乎Visual Studio 2013将在c++项目中使用12.0。在项目属性中,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 8.1而不是Windows 10中使用Windows Kit。
注意:尽管你可以在VS2013中瞄准。net 4.6,但它不理解c# 6,所以如果你尝试使用任何新的语言特性,都会出现错误。类似地,针对c++项目的v120
将阻止您使用VS2015中支持的新语言特性。