我会尽量解释清楚
我想完全了解 MSBuild 多目标是如何工作的。
我已经阅读了微软的几篇文章,我想我了解基本知识,但我想确保我没有遗漏任何东西。
据微软称:
通过使用 Visual Studio,您可以编译应用程序以在 .NET Framework 的多个版本中的任何一个上运行。例如,您可以编译一个应用程序以在 .NET Framework 2.0 版上运行,并编译同一个应用程序以在 .NET Framework 4 版上运行。编译到多个框架的能力称为多目标。
Visual Studio 在开发计算机上安装的最新版本的 .NET Framework 下运行。
http://msdn.microsoft.com/en-us/library/ee395432.aspx
那么这是否意味着 Visual Studio 总是从安装的最新框架调用 MSBuild?假设已安装 Visual Studio 2010,它将始终调用:%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe
在构建任何以任何 .Net Framework 版本为目标的项目时,对吗???
如果是,那么针对旧 .Net Framewrok 版本的能力是基于ToolsVersion
and/orTargetFrameworkVersion
属性,对吗???
如果再次是,则意味着仅在我的持续集成框中安装最新的框架(以及较旧的框架,但不安装 Visual Studio),我可以指出始终构建任何解决方案:%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe
并且只需指定ToolsVersion
参数(如果需要,因为每个项目都可以有自己的目标版本TargetFrameworkVersion
,这将导致针对较旧的 .Net Framework 版本)。
在此之后,我认为我的 CI 框会像 Visual Studio 一样构建。我对吗?我错过了什么?有没有办法完全确定?
我做了一个快速测试,我认为它有效:p项目是根据指定的 .Net 框架构建的,但就像我说的那样,我想确保我没有遗漏任何东西。
有什么想法吗?
顺便提一句:
想要这样做的简单原因是因为我有几个可跨项目重用的自定义 MSBuild 脚本,但这些脚本中的一些功能需要 MSBuild 4.0,而且我有几个构建在框架 4.0 之上的 MSBuild 任务,所以如果我例如,有一个针对 Framework 2.0 的解决方案,我尝试使用以下方法构建它:%WINDIR%\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe
我在尝试加载我的自定义目标时遇到 MSBuild 错误