更改<TargetFrameworkVersion>
还不够,构建工具仍然使用安装在您机器上的 .NET 4 版本。通过在生成的程序集上运行 ildasm.exe 可以看到一些内容。双击清单以查看:
// Metadata version: v4.0.30319
...
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.hash = (DD 9E C9 8D BF 2A 2D C2 AA 2D C3 8B 51 CD 4C A6 // .....*-..-..Q.L.
15 F0 22 F6 ) // ..".
.ver 2:0:0:0
}
...
.assembly extern mscorlib as mscorlib_4
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.hash = (47 6E C0 E3 BA CD CE B1 9A 4D 68 BE 29 75 61 6F // Gn.......Mh.)uao
BE 04 C6 BA )
.ver 4:0:0:0
}
请注意这两个版本的 mscorlib.dll 如何最终成为依赖项。你遇到的问题。
我链接的反馈文章建议将工具集更改为“v90”。然而,这在我的机器上不起作用,即使我安装了 VS2008。该选项未显示在组合框下拉列表中,当我强制它时,我收到此构建错误:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(43,5):错误 MSB8020:Visual Studio 2008 的构建工具(Platform Toolset = 'v90 ') 找不到。要使用 v90 构建工具进行构建,请单击“项目”菜单或右键单击解决方案,然后选择“更新 VC++ 项目...”。安装 Visual Studio 2008 以使用 Visual Studio 2008 构建工具进行构建。
按照错误消息中给出的建议,我得到了这个:
------ Update VC++ projects started -------
Updating project 'ConsoleApplication74'...
Configuration 'Debug|Win32': changing Platform Toolset to 'v110' (was 'v90').
Configuration 'Release|Win32': no update required. Platform Toolset is 'v110'.
TargetFrameworkVersion = v4.5 (was v2.0)
回到原点。我想说,在 C++/CLI 项目中使用 VS2012 来定位 .NET 2.0 是一个失败的原因。