首页 > 解决方案 > 如何在 Azure 管道中从 MsBuild 创建 Azure 云服务包

问题描述

我有一些云服务项目,我正试图将其纳入 CI/CD。当我右键单击项目Visual Studio并单击Package它时,它会执行我想要的操作。打包命令完成后,我可以在文件夹中看到ServiceConfiguration.cscfgand 。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 和所需的文件。我在命令参数中遗漏了什么吗?请指教

编辑:也参考了官方文档,找不到任何东西

编辑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

在此处输入图像描述

更新 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"..

在此处输入图像描述

标签: msbuildazure-devopsazure-cloud-servicesazure-pipelines-build-task

解决方案


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

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

在我测试时,如果我将参数更改为PublishDir,它可以正常工作:

在此处输入图像描述

对于第二个问题,我对Azure云服务不熟悉,因为我知道MSBuild/Visual Studio,我们应该构建“主”项目而不是参考项目,所以你可以尝试构建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)$(ProjectDir)..\

更新2:

由于您可以.sln毫无问题地在本地构建文件,因此您也可以.sln使用 Azure 管道构建文件。作为测试,我可以在 Azure 管道中构建 .sln 文件:

在此处输入图像描述

在此处输入图像描述

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

希望这可以帮助。


推荐阅读