针对具有不同构建参数的多个项目运行构建
Posted
技术标签:
【中文标题】针对具有不同构建参数的多个项目运行构建【英文标题】:Running a build against multiple projects with different build arguments 【发布时间】:2013-08-20 09:44:14 【问题描述】:我有一系列项目需要编译和发布,部署到具有单独 MSBuild 参数的单独目录。就目前而言,我对每个都有单独的构建。比如项目一:
MSBuild Arguments: /target:myTarget /property:PublishDir=\\1.1.1.1\PublishDir1
和项目 2:
MSBuild Arguments: /target:myTarget /property:PublishDir=\\1.1.1.2\PublishDir2
但是我想将它们合并到一个版本中。我遇到的问题是,虽然 TFS 允许我在构建中指定多个项目,但 MSBuild 参数适用于所有项目。有没有一种快速的方法可以强制每个项目使用一组不同的构建参数,或者我是否需要创建一个新的构建模板来执行此操作?
【问题讨论】:
我想不出任何不涉及在模板 XAML 中修改的东西。 您是否有正在使用的自定义 MSBUILD 脚本?当我使用 TFS2008(直接使用 TFSBuild.proj msbuild 脚本)时,我们有一个类似的问题需要解决。我们当时所做的是编辑 TFSBuild.proj 文件以添加在构建期间传入的其他 MSBUILD 属性(例如:target_proj1、publishDir_proj1、Target_proj2 等)。然后在基于正在编译的项目的 MSBUILD 脚本中,我们将适当的属性传递给 MSBUILD.exe 调用。 IIRC TFSBuild.proj 文件在 2010 年被 WF Xaml 文件取代。我将对此进行更正。 是的,它们在 2010 年被 WF XAML 取代,这就是我说“是”时的原因。如果您使用的是 XAML,那么就像 DaveShaw 提到的那样,您将不得不使用 XAML 来满足您的需求。 【参考方案1】:恐怕您需要新的构建模板才能将其他参数传递给模板。
但是,如果您尝试根据不同的项目将构建输出发布到不同的目录,您可以通过为每个项目设置相同的发布配置文件来实现。为每个具有相同名称的项目添加发布配置文件。您可以使用文件系统发布方法将输出发布到每个项目的不同目录。只需调用 MsBuild 参数中的发布配置文件。
/p:DeployOnBuild=true;PublishProfile=Dev
【讨论】:
我没有意识到你可以为非网络应用程序配置发布配置文件。我该怎么办? 对不起。我没有意识到您正在使用非网络应用程序。您不能将发布配置文件添加到非 Web 应用程序。我认为在您的情况下,您需要自定义模板,或者您可以尝试这种方法blog.stangroome.com/2011/09/06/… 不完全是我想要的,但它确实为我节省了一些尝试自己更改构建定义的工作(并且有效) - 谢谢【参考方案2】:我建议您创建一个 MSBuild .proj
文件来执行构建,即:
<Project ToolsVersion="4.0" DefaultTargets="Rebuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Rebuild" >
<!--Execute proj1-->
<MSBuild Projects="Proj1.csproj" Properties="Configuration=Debug;PublishDir=\\1.1.1.2\PublishDir1;></MSBuild>
<!--Execute proj2-->
<MSBuild Projects="Proj2.csproj" Properties="Configuration=Debug;PublishDir=\\1.1.1.2\PublishDir2;></MSBuild>
</Target>
</Project>
只需将您的 tfs 指向此自定义 .proj
文件即可。
【讨论】:
不会有这样的问题,即构建所做的所有其他事情(例如获取最新源等)都会被遗漏吗? 我认为这取决于您如何配置构建。我们使用我描述的方法并且效果很好 - 我认为您可以尝试一下,看看它是否适合您 我收到错误“项目中不存在目标“构建”。”有了这个。 @s093294 ,我已更改默认目标(请参阅更新代码: DefaultTargets="Rebuild" ) 我想通了。谢谢。以上是关于针对具有不同构建参数的多个项目运行构建的主要内容,如果未能解决你的问题,请参考以下文章
在多个平台的解决方案中构建 Visual Studio C++ 项目