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



我有一个解决方案,有一些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中支持的新语言特性。

最新更新