在构建管道期间覆盖发布配置文件的发布文件夹(url)

时间:2019-12-10 15:44:53

标签: asp.net asp.net-mvc tfs msbuild pubxml

我们有一个包含多个项目的ASP.Net解决方案。每个项目的build.pubxml都具有唯一的文件夹路径。

例如:

在项目Test中,我们在build.pubxml内有这行:

<publishUrl>C:\publish\SolutionName\Test</publishUrl>

在项目Exam中,我们在build.pubxml内有这行:

<publishUrl>C:\publish\SolutionName\Exam</publishUrl>

在构建管道(在TFS中)中,具有带有以下参数的MSBuild步骤:

/p:PublishProfile=build.pubxml

构建之后,我们在Test中有两个文件夹-ExamC:\publish\SolutionName

到目前为止很好。

问题在于我们的分支很少,并且我们希望为每个分支分开publish文件夹,因此我们为每个分支添加了.pubxml,并在构建管道中指定了正确的分支。但是make会在每个新分支上创建大量工作,并且会导致错误。

我们试图在MSBuild中传递/p:publishUrl=C:\publish\BranchName,但是随后我们得到了一个包含TestExam所有内容的文件夹,而不是两个文件夹。

这个想法是每个带有参数的项目只有一个 .pubxml文件,并在管道中传递值,例如:

<publishUrl>C:\publish\$(Parameter)\Test</publishUrl>

在构建中,我们将根据分支传递参数。

可以做这样的事情吗?

1 个答案:

答案 0 :(得分:1)

  

可以做这样的事情吗?

答案是肯定的。由于msbuild在命令行中接受Global Properties。如果我们在build.pubxml中定义一个属性,例如<publishUrl>C:\PublishFolders\$(BranchID)\xxx(Test,Exam...)</publishUrl>,则可以简单地在msbuild参数中传递值,如下所示:

enter image description here

然后,我们将在Test下获得ExamC:\PublishFolders\NewTest文件夹。我们还可以选择将管道的预定义变量传递给命令,例如:/p:BranchID=$(Build.SourceBranch) ...

这适用于在本地计算机,tfs和Azure Devops管道中进行构建。希望以上所有对您有所帮助:)