【问题标题】:Difference between ToolsVersion and TargetFrameworkVersionToolsVersion 和 TargetFrameworkVersion 的区别
【发布时间】:2014-04-08 17:16:59
【问题描述】:

ToolsVersionTargetFrameworkVersion有什么区别?

<Project DefaultTargets="Build"  ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
   ......  
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

【问题讨论】:

  • 您可能想要更改已接受的答案,更新的、未接受的答案会好得多。

标签: c# visual-studio-2012


【解决方案1】:

不同之处在于 TargetFrameworkVersion 实际上有任何效果,而 ToolsVersion 通常完全完全完全忽略如果您使用任何 VS up来自 VS2013。

正如丹尼尔简洁地说:

目标框架是 .net 框架功能/类所针对的 可在您的代码中使用。


至于ToolsVersion(在项目文件的Project元素内):

除非您指定 MSBUILDLEGACYDEFAULTTOOLSVERSION,否则它会被忽略:请注意 var 名称中的“legacy”。

这实际上在 MSDN 文档中得到了证明,但是您必须在版本之间来回切换,并且拥有像 Compiling for ToolsVersion 12 with Visual Studio 2015 这样的背景事实也有帮助。

这里是相关的 MSDN 部分:(所有 emph. mine)

MSBuild Toolset (ToolsVersion)

当在项目文件中定义 ToolsVersion 值时,MSBuild 使用 该值来确定工具集属性的值 可用于项目。一个工具集属性是 $(MSBuildToolsPath), 它指定 .NET Framework 工具的路径。只有这样 工具集属性(或 $(MSBuildBinPath)),是必需的。

...这实际上是错误的,将 VS2015 文档与 VS2012 文档进行比较,我们看到该段落被复制下来了。

但是,VS2015 文档继续有第二段,VS2012 version:

从 Visual Studio 2013 开始,MSBuild 工具集版本是 与 Visual Studio 版本号相同。 MSBuild 默认为这个 Visual Studio 和命令行中的工具集,无论 项目文件中指定的工具集版本。 这种行为可以是 使用 /ToolsVersion 标志覆盖。有关详细信息,请参阅 Overriding ToolsVersion Settings.

点击链接,我们看到:

覆盖 ToolsVersion 设置

...

优先顺序

优先级顺序,从高到低,用于确定 工具版本是:

  1. 用于构建项目的 MSBuild 任务的 ToolsVersion 属性(如果有)。
  2. msbuild.exe 命令中使用的 /toolsversion(或 /tv)开关(如果有)。
  3. 如果设置了环境变量 MSBUILDTREATALLTOOLSVERSIONSASCURRENT,则使用当前的 ToolsVersion。
  4. 如果设置了环境变量 MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT 并且项目文件中定义的 ToolsVersion 更大 比当前的 ToolsVersion,使用当前的 ToolsVersion。

  5. 如果设置了环境变量MSBUILDLEGACYDEFAULTTOOLSVERSION,或者没有设置ToolsVersion,则使用以下步骤:

    1. 项目文件的 Project 元素的 ToolsVersion 属性。 如果该属性不存在,则假定为 当前版本。
    2. MSBuild.exe.config 文件中的默认工具版本。
    3. 注册表中的默认工具版本。有关详细信息,请参阅标准和自定义工具集配置。
  6. 如果没有设置环境变量MSBUILLDLEGACYDEFAULTTOOLSVERSION,则使用以下步骤:

    1. 如果环境变量 MSBUILDDEFAULTTOOLSVERSION 设置为存在的 ToolsVersion,请使用它。
    2. 如果在 MSBuild.exe.config 中设置了 DefaultOverrideToolsVersion,请使用它。
    3. 如果在注册表中设置了 DefaultOverrideToolsVersion,请使用它。
    4. 否则,请使用当前的 ToolsVersion。

请注意,项目文件仅在突出显示的情况下使用。

【讨论】:

    【解决方案2】:

    工具版本是要使用的 MSBuild 版本。目标框架是可在您的代码中使用的 .net 框架功能/类。

    【讨论】:

    • ToolsVersion="4.0" 和 v4.5 表示我使用的是 .Net 4.5?
    • TargetFrameworkVersion=v4.5 的 toolsversion 值是多少?
    • @user3511427 我认为.net 4.5 从 4.0 没有任何工具更改
    • @user3511427 是的,这意味着您拥有正确的框架。
    • 表示.net framework 4.5使用ToolsVersion="4.0"?
    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 2021-06-09
    • 2017-09-29
    • 1970-01-01
    • 2015-09-19
    • 2019-04-13
    • 2020-07-11
    • 1970-01-01
    相关资源
    最近更新 更多