如何在 Azure 管道中使用 Visual Studio 中的发布配置文件选项?
Posted
技术标签:
【中文标题】如何在 Azure 管道中使用 Visual Studio 中的发布配置文件选项?【英文标题】:How to use publish profile options from Visual Studio in azure pipelines? 【发布时间】:2020-02-23 10:56:29 【问题描述】:我有一个 ASP.NET 项目,我想使用 Azure 管道实现 CI-CD,以部署到自定义服务器 (IIS)。 目前,当使用 Visual Studio(2019) 手动发布 Web 应用程序时,我使用这些选项来发布配置文件:
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<PublishProvider>FileSystem</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>True</ExcludeApp_Data>
<publishUrl>C:\Test</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
<PrecompileBeforePublish>True</PrecompileBeforePublish>
<EnableUpdateable>False</EnableUpdateable>
<DebugSymbols>False</DebugSymbols>
<WDPMergeOption>MergeEachIndividualFolder</WDPMergeOption>
<UseMerge>True</UseMerge>
</PropertyGroup>
我想要实现的主要目标是在使用构建和发布管道进行部署时实现<WDPMergeOption>MergeEachIndividualFolder</WDPMergeOption>
。
对于发布管道,我使用的是 IIS Web 部署。
为了构建管道代理规范,我使用的是 vs2017-win2016
对于构建解决方案任务,我使用的是最新版本的视觉 stidio
我尝试过的事情:
1.将配置参数传递给 msbuild,用于 azure 构建管道中的构建解决方案任务:
/p:PackageAsSingleFile=true /p:PackageLocation="$(build.artifactstagingdirectory) /p:OutputPath=bin
/p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:PrecompileBeforePublish=true
/p:EnableUpdateable=false /p:DebugSymbols=true /p:UseMerge=true /p:DeleteAppCodeCompiledFiles=True
/p:DeleteExistingFiles=True /p:WDPMergeOption=MergeEachIndividualFolder /p:UseFixedNames=true\\"
2。上传 FolderProfile.pubxml ,并将参数传递给 msbuild 以从该文件中读取
所有构建和发布都很好,但不会在发布中合并程序集,因为配置了合并选项,msbuild
似乎忽略了这些额外的合并参数。
如何做到这一点,主要问题是在使用 azure 管道部署时如何使用MergeEachIndividualFolder
选项?
我也搜索了很多,但似乎没有一个问题涵盖解决方案。
Azure DevOps Build - publish doesn't create .compiled files in bin folder on publish
MSBuild commandline seems to ignore publish properties
【问题讨论】:
你试过/p:DeployOnBuild=true /p:PublishProfile=xxxx
参数吗?
@CeceDong-MSFT 如果xxx
指的是FolderProfile.pubxml
的路径,是的,我已经尝试过了
xxxx
表示配置文件名称:/p:DeployOnBuild=true /p:PublishProfile=FolderProfile
您的问题进展如何?论证有效吗?
【参考方案1】:
Cece Dong 的建议 - MSFT 在我使用发布配置文件的实例中起作用。
YML 下面的代码段
- task: VSBuild@1
inputs:
solution: 'Path\MySolution.sln'
vsVersion: '16.0'
msbuildArgs: '/p:DeployOnBuild=true /p:PublishProfile=myProfile.pubxml'
configuration: 'Release'
然后在构建的输出中,您可以看到它具有预期的效果:
WebFileSystemPublish: 创建目录“C:\MyPublishPath”。 将 obj\Release\Package\PackageTmp\File1.ext 复制到 C:\MyPublishPath\File1.ext。 将 obj\Release\Package\PackageTmp\File2.ext 复制到 C:\MyPublishPath\File2.ext。 将 obj\Release\Package\PackageTmp\bin\File3.ext 复制到 C:\MyPublishPath\bin\File3.ext。 将 obj\Release\Package\PackageTmp\bin\File4.ext 复制到 C:\MyPublishPath\bin\File4.ext。 ...发布中包含的所有其他文件
【讨论】:
以上是关于如何在 Azure 管道中使用 Visual Studio 中的发布配置文件选项?的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft.NET.Sdk.CrossTargeting.targets 上的 Visual Studio Build in Azure DevOps 管道错误
在 Visual Studio 中使用相同的 docker 文件构建 docker 映像的 Azure Pipeline 失败