ToolsVersion和TargetFrameworkVersion之间的区别

Ahs*_*san 6 c# visual-studio-2012

ToolsVersionTargetFrameworkVersion有什么区别?

<Project DefaultTargets="Build"  ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
   ......  
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)

Mar*_* Ba 10

不同之处在于TargetFrameworkVersion实际上有任何影响,而如果您使用VS2013中的任何VS ,则ToolsVersion通常完全且完全忽略您的工具链.

正如丹尼尔简明扼要地说:

目标框架是可以在代码中使用.net框架功能/类的.


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

它被忽略,除非您指定MSBUILDLEGACYDEFAULTTOOLSVERSION:注意var名称中的"legacy".

这实际上是在MSDN文档中证明的,但是您必须在版本之间来回跳转,并且使用Visual Studio 2015编译ToolsVersion 12等背景事实也会有所帮助.

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

MSBuild工具集(ToolsVersion)

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

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

但是,VS2015文档继续使用VS2012版本中缺少的第二段:

从Visual Studio 2013开始,MSBuild Toolset版本与Visual Studio版本号相同.无论项目文件中指定的工具集版本如何,MSBuild都默认在Visual Studio和命令行中的此工具集.可以使用/ ToolsVersion标志覆盖此行为.有关更多信息,请参阅 覆盖ToolsVersion设置.

按照链接,我们看到:

覆盖ToolsVersion设置

...

优先顺序

用于确定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. 如果未设置环境变量MSBUILDLEGACYDEFAULTTOOLSVERSION,则使用以下步骤:

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

请注意,项目文件仅用于突出显示的情况.


Dan*_*ite 6

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