Ahs*_*san 6 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>
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的优先顺序(从最高到最低)是:
- 用于构建项目的MSBuild任务上的ToolsVersion属性(如果有).
- msbuild.exe命令中使用的/ toolsversion(或/ tv)开关(如果有).
- 如果设置了环境变量MSBUILDTREATALLTOOLSVERSIONSASCURRENT,则使用当前的ToolsVersion.
如果设置了环境变量MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT并且项目文件中定义的ToolsVersion大于当前ToolsVersion,请使用当前的ToolsVersion.
如果
MSBUILDLEGACYDEFAULTTOOLSVERSION设置了环境变量,或者未设置ToolsVersion,则使用以下步骤:
- 项目文件的Project元素的ToolsVersion属性.如果此属性不存在,则假定它是当前版本.
- MSBuild.exe.config文件中的默认工具版本.
- 注册表中的默认工具版本.有关更多信息,请参阅标准和自定义工具集配置.
如果未设置环境变量MSBUILDLEGACYDEFAULTTOOLSVERSION,则使用以下步骤:
- 如果环境变量MSBUILDDEFAULTTOOLSVERSION设置为存在的ToolsVersion,请使用它.
- 如果在MSBuild.exe.config中设置了DefaultOverrideToolsVersion,请使用它.
- 如果在注册表中设置了DefaultOverrideToolsVersion,请使用它.
- 否则,请使用当前的ToolsVersion.
请注意,项目文件仅用于突出显示的情况.
| 归档时间: |
|
| 查看次数: |
6840 次 |
| 最近记录: |