【问题标题】:How to create Azure Cloud Service package from MsBuild in azure pipeline如何在 Azure 管道中从 MsBuild 创建 Azure 云服务包
【发布时间】:2019-05-14 12:34:23
【问题描述】:

我有一些云服务项目,我正试图将其纳入 CI/CD。当我右键单击来自Visual Studio 的项目并单击Package 时,它会执行我想要的操作。打包命令完成后,我可以在bin\Release文件夹中看到ServiceConfiguration.cscfgServiceDefinition.csdef

如何从 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

未定义在本地运行良好,因为它在 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"..

【问题讨论】:

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


    【解决方案1】:

    我得到的是命令完成,我可以在文件夹中看到大约 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),但构建项目文件,您将收到该错误。因为项目参考信息存在于解决方案信息中,所以我们只构建一个项目时是无法访问的。

    尝试用$(ProjectDir)..\替换所有$(SolutionDir)

    更新2:

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

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

    希望这会有所帮助。

    【讨论】:

    • 嗨 Leo,我昨天发现的第一部分。不过还是谢谢。对于第二部分,我有一个构建后事件,它会进行一些混淆。所以在构建之后,解决方案路径变得不确定,同时直接构建 CloudServiceProject 以及
    • 在问题中添加了更多日志信息
    • @HariHaran,我已经更新了答案,看看对你有没有帮助。
    • @HariHaran,我创建了一个示例进行测试,它在我这边工作正常,您可以在我的答案中查看 update2 以了解详细信息。如果仍然没有帮助,请在您的问题中分享您的构建事件。
    • @HariHaran,如果您有多个 CloudServiceProject 项目,它将为所有项目提供相同的参数。在这种情况下,如果您需要为不同的项目设置不同的参数,则需要构建项目文件,我们必须在构建事件中解决该问题。
    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    相关资源
    最近更新 更多