我们有一个包含多个项目的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
中有两个文件夹-Exam
和C:\publish\SolutionName
。
到目前为止很好。
问题在于我们的分支很少,并且我们希望为每个分支分开publish文件夹,因此我们为每个分支添加了.pubxml
,并在构建管道中指定了正确的分支。但是make会在每个新分支上创建大量工作,并且会导致错误。
我们试图在MSBuild中传递/p:publishUrl=C:\publish\BranchName
,但是随后我们得到了一个包含Test
和Exam
所有内容的文件夹,而不是两个文件夹。
这个想法是每个带有参数的项目只有一个 .pubxml
文件,并在管道中传递值,例如:
<publishUrl>C:\publish\$(Parameter)\Test</publishUrl>
在构建中,我们将根据分支传递参数。
可以做这样的事情吗?
答案 0 :(得分:1)
可以做这样的事情吗?
答案是肯定的。由于msbuild在命令行中接受Global Properties。如果我们在build.pubxml
中定义一个属性,例如<publishUrl>C:\PublishFolders\$(BranchID)\xxx(Test,Exam...)</publishUrl>
,则可以简单地在msbuild参数中传递值,如下所示:
然后,我们将在Test
下获得Exam
和C:\PublishFolders\NewTest
文件夹。我们还可以选择将管道的预定义变量传递给命令,例如:/p:BranchID=$(Build.SourceBranch)
...
这适用于在本地计算机,tfs和Azure Devops管道中进行构建。希望以上所有对您有所帮助:)