我有一些云服务项目,我正在尝试将其纳入CI / CD。当我右键单击Visual Studio
中的项目,然后单击Package
时,它便完成了我想要的工作。打包命令完成后,我可以在ServiceConfiguration.cscfg
文件夹中看到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和所需的文件。我在命令参数中缺少什么吗?请咨询
编辑:也提到了官方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
更新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"..
答案 0 :(得分:1)
我得到的是命令完成,我可以在文件夹中看到大约241个dll和所需的文件。我在命令参数中缺少某些内容吗?
对于此问题,您可以尝试将参数/p:outdir="D:\Pub"
更改为/p:PublishDir="D:\Pub"
。那是因为参数outdir
用于存储输出文件而不是发布文件,所以它包含项目(包括参考项目)的生成输出。那就是为什么文件夹中大约有241个dll和所需文件的原因。
正如我测试的那样,如果我将参数更改为PublishDir
,它将正常工作:
对于第二个问题,由于我对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文件:
此外,如果您将.sln
替换为$(SolutionDir)
,仍然如何得到错误 Undefined ?尝试仔细检查您的构建事件,或者可以在问题中分享它。
希望这会有所帮助。