msbuild - 如何在 Azure 管道中从 MsBuild 创建 Azure 云服务包
问题描述
我有一些云服务项目,我正试图将其纳入 CI/CD。当我右键单击项目Visual Studio
并单击Package
它时,它会执行我想要的操作。打包命令完成后,我可以在文件夹中看到ServiceConfiguration.cscfg
and 。ServiceDefinition.csdef
bin\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"..
解决方案
我得到的是命令完成,我可以在文件夹中看到大约 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?尝试仔细检查您构建的事件,或者您可以在问题中分享它。
希望这可以帮助。
推荐阅读
- node.js - Node.js - EventListener - 仅捕获触发数据事件的套接字的关闭事件
- php - 如何替换 URL 中的 GET 参数
- python - SymPy 的多元最小值
- python - Python:复杂的字典列表
- azure - 无法访问 Azure 机器学习服务笔记本上装载的数据集
- azure - Azure Function on 消费计划冷启动最长可达 30 分钟
- firebase - 参数类型“Userr”不能分配给参数类型“User”
- python - 在 django 中处理来自多个模型的多个外键
- http-proxy - 在 Zuul Proxy 中实现缓存层
- ubuntu-18.04 - ImportError:无法导入名称“hash_unicode”