1

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

例如:

在项目Test中,我们在里面有这一行build.pubxml

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

在项目Exam中,我们在里面有这一行build.pubxml

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

在具有此参数的 MSBuild 步骤的构建管道(在 TFS 中)中:

/p:PublishProfile=build.pubxml

构建后,我们得到了 2 个文件夹 -TestExamC:\publish\SolutionName.

到目前为止,一切都很好。

问题是我们的分支很少,我们想为每个分支分离发布文件夹,所以我们.pubxml为每个分支添加了,在构建管道中我们指定了正确的。但是 make 在创建的每个新分支上都需要做很多工作,并且可能会导致错误。

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

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

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

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

有可能做这样的事情吗?

4

1 回答 1

2

有可能做这样的事情吗?

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

在此处输入图像描述

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

这适用于在本地机器、tfs 和 Azure Devops 管道中构建。希望以上所有帮助:)

于 2019-12-11T06:28:14.203 回答