【问题标题】:ToolsVersion specification in .NET projects.NET 项目中的 ToolsVersion 规范
【发布时间】:2019-03-19 08:02:18
【问题描述】:

我看到一些 C# 项目记录了它们的 ToolsVersion 而其他没有。 (例如 ToolsVersion="15.0")

最佳做法是什么?这也是显式优于隐式的情况吗?

【问题讨论】:

  • 我很确定每个 .NET 项目都需要定义它用于构建和编译的 MSBuild 工具集的版本。但是一些项目类型使用sdk 属性而不是ToolsVersion,因为this microsoft docs 文章指出

标签: c# .net csproj


【解决方案1】:

“ToolsVersion”属性对于区分在全局 MSBuild 安装中并排安装的工具版本非常有用。

从 VS 2017 开始,不再有全局 MSBuild 安装,ToolsVersion 的重要性降低了。

在 VS 2019 中,他们引入了一个 Current 版本,旨在取代对实际版本号的需求,而不会破坏其太多使用(例如,您将看到包含名为 Current 的文件夹的路径)并确保项目和扩展将更轻松地更新到新版本而不会中断。

因此,只要您使用最新版本的 VS(2017 年、2019 年),就不需要指定 ToolsVersion,尤其是当您正在为 .NET Core 或 .NET Standard 编写项目时。

【讨论】:

  • 如果那个项目在不同的VS版本上运行,会不会导致不一致?
  • 取决于项目类型。例如,有 VS 2010 Web 项目会在较新的 VS 看到旧的 ToolsVersion 时执行更新。对于 VS 2017+ 中的新项目,它应该不再重要了
  • 很高兴知道。使用ToolsVersion="14.0" 加载了一个较旧的(非托管)项目,并将其替换为ToolsVersion="16.0"。在这两种情况下都没有警告,并且似乎构建相同。