【问题标题】:Compiling for ToolsVersion 12 with Visual Studio 2015使用 Visual Studio 2015 编译 ToolsVersion 12
【发布时间】: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


【解决方案1】:

我把这个答案留在这里,以防它帮助其他人,但它并没有帮助原始海报,因为根据@user1029883,当 VS2015 与 12.0 构建工具一起安装时它不起作用(请参阅下面@alexandrul 的评论)而不是 Visual Studio 的多个版本:抱歉。


不幸的是,似乎没有直接的方法可以做到这一点。但是,有一种繁琐的方法:

  • 设置环境变量MSBUILDLEGACYDEFAULTTOOLSVERSION
  • 确保所有项目文件中顶级Project 元素中的ToolsVersion 属性设置为所需的ToolsVersion

Overriding ToolsVersion Settings page on MSDN

【讨论】:

  • 我之前试过了,还是不行。在我的顶级项目文件和环境变量下方:schemas.microsoft.com/developer/msbuild/2003">MSBUILLDLEGACYDEFAULTTOOLSVERSION 1跨度>
  • 原谅我的无知:你是如何在不安装VS2013的情况下安装toolsversion 12.0的?
  • @GuyBoltonKing microsoft.com/en-us/download/details.aspx?id=40760 "如果您的计算机上没有安装 Visual Studio,您可以使用 Build Tools 2013 构建托管应用程序。此下载中还包含 Visual Basic 和 C# 编译器.(在早期版本中,这些工具包含在独立的 .NET Framework 中。)"
  • 这正是我所做的,下载并安装了工具集。正如我在原始消息中发布的那样,手动使用 12 个工具集中的 csc 和 msbuild 可以正常工作。从 vs 2015 开始,仍然没有可行的解决方案。
  • @GuyBoltonKing 它不是“代替”。我安装了 VS2015 并手动安装了 12 版工具。根据 MSDN 文档,这应该可以工作,但不能。如果除了 VS2015 之外还安装了 VS 2012,可能会这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2015-12-13
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多