如何在Azure管道中从MsBuild创建Azure云服务包

时间:2019-05-14 12:34:23

标签: msbuild azure-devops azure-cloud-services azure-pipelines-build-task

我有一些云服务项目,我正在尝试将其纳入CI / CD。当我右键单击Visual Studio中的项目,然后单击Package时,它便完成了我想要的工作。打包命令完成后,我可以在ServiceConfiguration.cscfg文件夹中看到ServiceDefinition.csdefbin\Release

如何从MSBuild命令行实现相同的目标?我尝试过

msbuild.exe 
/p:DeployTarget=Package 
/p:DeployOnBuild=true 
/p:AutomatedBuild=True 
/p:configuration=release 
/p:outdir="D:\Pub" 
/p:targetprofile="Cloud" 
/target:Publish  
/p:SolutionDir=$/src/mysln/ WorkerRole.ccproj

我得到的是命令完成,我可以在文件夹中看到大约241个dll和所需的文件。我在命令参数中缺少什么吗?请咨询

编辑:也提到了官方docs,找不到任何东西

编辑2:看起来我可以生成软件包。现在的问题是在VSTS中执行此操作。构建失败," projectfile="*Undefined*Obfuscator\Maps\

基本上,解决方案的路径变得不确定

编辑3:这是当我尝试仅构建CloudServiceProj

时的错误消息
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(5165,5): Error MSB3073: The command "if "Release" == "Debug" goto :exit
"*Undefined*Obfuscator\Tool\CO" projectfile="*Undefined*Obfuscator\Maps

undefined在本地运行良好,因为它在VS中具有$(SolutionDir)变量。不确定在这里如何处理

更新

这是正在使用的msbuild

enter image description here

更新4

我尝试根据建议直接构建解决方案,但是它具有一些.NET CORE和.NET Framework项目,并且出现此错误

C:\Program Files\dotnet\sdk\2.2.105\Sdks\Microsoft.NET.Sdk.Publish\build\netstandard1.0\Microsoft.NET.Sdk.Publish.targets(163,11): Error MSB4006: There is a circular dependency in the target dependency graph involving target "Publish"..

enter image description here

1 个答案:

答案 0 :(得分:1)

  

我得到的是命令完成,我可以在文件夹中看到大约241个dll和所需的文件。我在命令参数中缺少某些内容吗?

对于此问题,您可以尝试将参数/p:outdir="D:\Pub"更改为/p:PublishDir="D:\Pub"。那是因为参数outdir用于存储输出文件而不是发布文件,所以它包含项目(包括参考项目)的生成输出。那就是为什么文件夹中大约有241个dll和所需文件的原因。

正如我测试的那样,如果我将参数更改为PublishDir,它将正常工作:

enter image description here

对于第二个问题,由于我对MSBuild / Visual Studio的了解,我对Azure Cloud Service不熟悉,我们应该构建“主”项目而不是参考项目,因此您可以尝试构建{{1 }}或构建解决方案文件AzureCloudService.ccproj

此外,当我们构建项目/解决方案时,我们不需要指定解决方案文件夹,只需直接指定项目文件或解决方案即可:

.sln

如果上述方法不能解决您的问题,请在您的问题中共享您的构建错误日志。

更新

  

对于第二部分,我有一个构建后事件,它做了一些   混淆。

如果您在构建事件中使用了任何宏,例如msbuild.exe "TheRelativePathForYourSolutionInRepos.sln" /t:Publish /p:DeployOnBuild=true /p:AutomatedBuild=True /p:configuration=release /p:TargetProfile=Cloud /p:PublishDir="D:\Pub" ,但是在构建项目文件时,将出现该错误。因为项目参考信息存在于解决方案信息中,所以当我们仅构建一个项目时就无法访问它。

尝试将所有$(SolutionDir)替换为$(SolutionDir)

Update2:

由于您可以在本地上构建$(ProjectDir)..\文件而没有任何问题,因此您还可以使用Azure管道构建.sln文件。作为测试,我可以在Azure管道中构建.sln文件:

enter image description here

enter image description here

此外,如果您将.sln替换为$(SolutionDir),仍然如何得到错误 Undefined ?尝试仔细检查您的构建事件,或者可以在问题中分享它。

希望这会有所帮助。