对于VS2013中针对.Net 4.6的一些项目,项目加载失败

时间:2015-07-22 04:54:55

标签: visual-c++ visual-studio-2013 visual-studio-2015 .net-4.6

我有一个解决方案,其中包含许多针对.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中打开解决方案和项目?

1 个答案:

答案 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中支持的更新语言功能。