【发布时间】:2016-02-20 21:21:11
【问题描述】:
我设置了一台新计算机并安装了 VS2015。编译我目前正在处理的项目会导致一些无效代码(ILSpy 创建不可编译的源)。使用 ToolsVersion 12 在 VS2013 中运行良好。
日志文件告诉我缺少 ToolsVersion 12,所以我安装了它。但是无论我做什么或设置,它总是使用 ToolsVersion 14 编译。我可以手动调用 VS2013 附带的MSBuild.exe(使用 ToolsVersion 12)并且代码是正确的。对 VS2015 附带的 MSBuild.exe 执行相同操作(使用 ToolsVersion 14)会导致错误代码。所以我只需要 VS2015 就可以使用 ToolSet 12。
MSDN 说:
“从 Visual Studio 2013 开始,MSBuild 工具集版本与 Visual Studio 版本号相同。MSBuild 在 Visual Studio 和命令行中默认使用此工具集,无论项目文件中指定的工具集版本如何。可以使用 /ToolsVersion 标志覆盖此行为。有关详细信息,请参阅覆盖 ToolsVersion 设置。"
手动使用 MSBuild 进行设置可以正常工作,但是如何在 VS 2015 中进行设置?所有环境变量都不起作用,它总是使用工具集 14!
【问题讨论】:
-
您必须卸载 .NET 4.6 才能删除基于 Roslyn 的编译器。否则,C# 编译器可能会继续为您提供相同的无效程序集。但一般来说,ILSpy 不适用于 Roslyn 编译的程序集。所以你的程序集可能确实有效,只是 ILSpy 无法理解它们。您可以查看 ILSpy 错误列表以了解更多信息。
-
抱歉,您的建议不能解决问题!真正的问题是 VS 使用 MSBuild 14。正如我之前提到的,如果我从 12 文件夹运行 MSBuild,一切都很好。我重命名了 14 文件夹,现在 VS 不加载项目,所以它正在寻找 14 文件夹。如果知道如何更改/设置 $(MSBuildToolsVersion) 变量,则解决方案很简单。这显然设置为 14,并且不再支持 ToolsVersion 属性(正如 Microsoft 声明的那样,没有提供有效的替代解决方案)。我将 14 文件夹重命名为 12 并导致其他崩溃... ARGH!
-
我不确定为什么这被否决了。问题似乎仍然是“如何让 VS2015 使用早期的 ToolsVersion 构建?”
-
VS2015 与以前的 VS 版本非常不同,集成了 Roslyn,这对 IDE 产生了很大的影响。所有编辑器功能都依赖于 Roslyn 生成的元数据。早期的工具版本当然不知道有关 Roslyn 的 bean。如果您只是因为 ILSpy 无法跟上而需要这样做,那么只需使用另一个反编译器。 Reflector v9 对 C# v6 有很好的支持。
标签: msbuild visual-studio-2015