ToolsVersion和TargetFrameworkVersion之间的区别

时间:2014-04-08 17:16:59

标签: c# visual-studio-2012

ToolsVersion TargetFrameworkVersion 有什么区别?

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

2 个答案:

答案 0 :(得分:9)

区别在于TargetFrameworkVersion实际上有任何影响,而ToolsVersion通常完全忽略 由您的工具链使用VS2013中的任何VS.

丹尼尔简明扼要地说:

  

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

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

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

这实际上是在MSDN文档中证明的,但你必须在版本之间来回跳转,并且像Compiling for ToolsVersion 12 with Visual Studio 2015这样的背景事实也会有所帮助。

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

  

MSBuild Toolset (ToolsVersion)

     

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

是必需的工具集属性(或$(MSBuildBinPath))

...这实际上是错误的,并且将VS2015文档与VS2012文档进行比较,我们发现段落被复制了。

但是,VS2015文档继续第二段,VS2012 version中缺少该段落

  

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

按照链接,我们看到:

  

覆盖ToolsVersion设置

     

...

     

优先顺序

     

优先顺序,从最高到最低,用于确定   ToolsVersion是:

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

  8.   
  9. 如果设置了环境变量MSBUILDLEGACYDEFAULTTOOLSVERSION ,或者未设置ToolsVersion,则使用以下步骤:

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

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

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

答案 1 :(得分:6)

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