1

我会尽量解释清楚

我想完全了解 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 版本的能力是基于ToolsVersionand/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 错误

4

1 回答 1

0

是的,你基本上是正确的。从 4.0 目录调用 MSBuild 将对以前的版本执行正确的操作。我唯一想补充的是,必须在包装盒上安装 3.5 才能实际构建针对 2.0、3.0 和 3.5 的项目。

这个页面在这里:http: //msdn.microsoft.com/en-us/library/bb822049.aspx列出了 Windows 预装了哪些版本的框架。

于 2012-09-26T02:48:21.700 回答