2013-08-20 54 views
1

我有一系列需要编译和发布的项目,部署到具有单独的MSBuild参数的单独目录中。就目前而言,我为每个构建单独构建。例如,项目1:针对具有不同构建参数的多个项目运行构建

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参数适用于所有项目。有没有一种快捷的方法,我可以强制每个项目的一组不同的构建参数,还是我需要创建一个新的构建模板来做到这一点?

+0

我想不出任何不涉及在模板XAML中进行黑客入侵的任何事情。 – DaveShaw

+0

你有一个你正在使用的自定义MSBUILD脚本吗? 当我使用TFS2008(直接使用TFSBuild.proj msbuild脚本)时,我们遇到了类似的问题。我们那时做了什么,我们编辑了TFSBuild.proj文件以添加在构建过程中传入的其他MSBUILD属性(例如:target_proj1,publishDir_proj1,Target_proj2等)。然后在基于正在编译的项目的MSBUILD脚本中,我们会将适当的属性传递给MSBUILD.exe调用。 – Isaiah4110

+0

在2010年,IIRC TFSBuild.proj文件被WF Xaml文件所取代。我谨此陈述。 –

回答

1

恐怕,您需要新的构建模板才能将其他参数传递给模板。

但是,如果您尝试将构建输出发布到基于不同项目的不同目录,则可以通过为每个项目设置相同的发布配置文件来实现它。为每个同名项目添加发布配置文件。您可以使用文件系统发布方法将输出发布到每个项目的不同目录。只需在MsBuild参数中调用发布配置文件即可。

/p:DeployOnBuild=true;PublishProfile=Dev 
+0

我没有意识到,可以为非web应用程序配置发布配置文件。我将如何去做这件事? –

+0

对不起。我没有意识到您正在使用非网络应用程序。您无法将发布配置文件添加到非Web应用程序。我认为你的情况,你需要自定义模板,或者你可以尝试这种方法http://blog.stangroome.com/2011/09/06/queue-another-team-build-when-one-team-build-succeeds/ – suresh2

+0

不完全是我想要的,但它确实节省了我一些工作,试图自己更改构建定义(并且它工作) - 谢谢 –

1

我建议你创建一个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文件。

+0

这不会有问题,构建所有其他的东西(例如获取最新源代码等)将被错过? –

+0

我认为这取决于你如何配置构建。我们使用我描述的方法,它工作正常 - 我认为你可以尝试一下,看看它是否适用于你 – Isantipov

+0

我收到一个错误“The target”Build“在项目中不存在。”有了这个。 –

相关问题