如何在不同环境中使用 Azure DevOps Pipeline 发布 ClickOnce 应用程序?
How to Publish a ClickOnce application with Azure DevOps Pipeline on different environments?
我已经尝试了几天来使用 Azure DevOps Pipeline 发布我的 ClickOnce 应用程序。在详细介绍之前,我想从我的发布视图中做些什么:
我从一个工件和 2 个发布阶段开始,在暂存阶段使用暂存变量修改 config.deploy
文件,并在生产阶段使用生产变量修改 config.deploy
文件。部署工作正常,但由于散列检查系统,应用程序的安装无法正常工作。
所以我决定用 2 个工件创建 2 个构建。我在第一次构建时将经典掉落重命名为 drop_staging
,在第二次构建时将其重命名为 drop_production
。我希望构建系统 (MSBuild) 能够在构建和发布过程中 select 正确的 app.Debug.config
然后 app.Release.config
文件。
这是我的构建定义
这是我的构建参数
/target:publish
/p:ApplicationVersion=$(Build.BuildNumber)
/p:PublishURL=http://app-staging.example.com/
/p:UpdateEnabled=true
/p:UpdateMode=Foreground
/p:ProductName="App Staging"
/p:OutputPath="$(build.ArtifactStagingDirectory)\Publish\"
第一个构建的配置设置为 Staging,然后第二个构建的 Production。当然,我在 visual Studio 中有 Staging 和 Production 构建定义。我的项目中有一个 app.config
和 app.Staging.config
和 app.Production.config
。
我不能在构建后简单地添加一个任务来转换我的配置文件,因为我不会尊重哈希。我应该找到一种方法让我的构建使用正确的 XML 转换配置文件。我没有看到任何其他解决方案或者可能在构建之前应用此转换?可能吗?你的解决方案是什么?
最后我可以通过在构建之前添加文件转换来解决这个问题。
如果您需要更多帮助,这里是我的 YAML 转换详细信息
steps:
- task: FileTransform@1
displayName: 'File Transform: '
inputs:
folderPath: App.Example
enableXmlTransform: true
xmlTransformationRules: '-transform **\*.Staging.config -xml **\*.config'
fileType: xml
#Your build pipeline references the ‘BuildPlatform’ variable, which you’ve selected to be settable at queue time. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it settable at queue time. See https://go.microsoft.com/fwlink/?linkid=865971
steps:
- task: VSBuild@1
displayName: 'Build solution'
inputs:
solution: Example.sln
msbuildArgs: '/target:publish /p:ApplicationVersion=$(Build.BuildNumber) /p:PublishURL=http://staging.example.com/ /p:UpdateEnabled=true /p:UpdateMode=Foreground /p:ProductName="App Staging" /p:OutputPath="$(build.ArtifactStagingDirectory)\Publish\"'
platform: '$(BuildPlatform)'
configuration: Staging
要添加到构建解决方案阶段,您可以使用您的 visual studio 发布配置文件,如下所示在 msbuildArgs.请注意,这不会为您增加版本
- task: VSBuild@1
displayName: 'Publish Project'
inputs:
solution: '$(projectSolution)'
msbuildArgs: '/target:publish /p:ApplicationRevision=$(applicationRevision) /p:PublishProfile="Application/PublishProfiles/HerbalPublishProfile.pubxml" /p:PublishDir="$(build.ArtifactStagingDirectory)\Publish\"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
msbuildArchitecture: x64
我已经尝试了几天来使用 Azure DevOps Pipeline 发布我的 ClickOnce 应用程序。在详细介绍之前,我想从我的发布视图中做些什么:
我从一个工件和 2 个发布阶段开始,在暂存阶段使用暂存变量修改 config.deploy
文件,并在生产阶段使用生产变量修改 config.deploy
文件。部署工作正常,但由于散列检查系统,应用程序的安装无法正常工作。
所以我决定用 2 个工件创建 2 个构建。我在第一次构建时将经典掉落重命名为 drop_staging
,在第二次构建时将其重命名为 drop_production
。我希望构建系统 (MSBuild) 能够在构建和发布过程中 select 正确的 app.Debug.config
然后 app.Release.config
文件。
这是我的构建定义
这是我的构建参数
/target:publish
/p:ApplicationVersion=$(Build.BuildNumber)
/p:PublishURL=http://app-staging.example.com/
/p:UpdateEnabled=true
/p:UpdateMode=Foreground
/p:ProductName="App Staging"
/p:OutputPath="$(build.ArtifactStagingDirectory)\Publish\"
第一个构建的配置设置为 Staging,然后第二个构建的 Production。当然,我在 visual Studio 中有 Staging 和 Production 构建定义。我的项目中有一个 app.config
和 app.Staging.config
和 app.Production.config
。
我不能在构建后简单地添加一个任务来转换我的配置文件,因为我不会尊重哈希。我应该找到一种方法让我的构建使用正确的 XML 转换配置文件。我没有看到任何其他解决方案或者可能在构建之前应用此转换?可能吗?你的解决方案是什么?
最后我可以通过在构建之前添加文件转换来解决这个问题。
如果您需要更多帮助,这里是我的 YAML 转换详细信息
steps:
- task: FileTransform@1
displayName: 'File Transform: '
inputs:
folderPath: App.Example
enableXmlTransform: true
xmlTransformationRules: '-transform **\*.Staging.config -xml **\*.config'
fileType: xml
#Your build pipeline references the ‘BuildPlatform’ variable, which you’ve selected to be settable at queue time. Create or edit the build pipeline for this YAML file, define the variable on the Variables tab, and then select the option to make it settable at queue time. See https://go.microsoft.com/fwlink/?linkid=865971
steps:
- task: VSBuild@1
displayName: 'Build solution'
inputs:
solution: Example.sln
msbuildArgs: '/target:publish /p:ApplicationVersion=$(Build.BuildNumber) /p:PublishURL=http://staging.example.com/ /p:UpdateEnabled=true /p:UpdateMode=Foreground /p:ProductName="App Staging" /p:OutputPath="$(build.ArtifactStagingDirectory)\Publish\"'
platform: '$(BuildPlatform)'
configuration: Staging
要添加到构建解决方案阶段,您可以使用您的 visual studio 发布配置文件,如下所示在 msbuildArgs.请注意,这不会为您增加版本
- task: VSBuild@1
displayName: 'Publish Project'
inputs:
solution: '$(projectSolution)'
msbuildArgs: '/target:publish /p:ApplicationRevision=$(applicationRevision) /p:PublishProfile="Application/PublishProfiles/HerbalPublishProfile.pubxml" /p:PublishDir="$(build.ArtifactStagingDirectory)\Publish\"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
msbuildArchitecture: x64