带有.Net Core的Azure Pipelines-为每个环境转换web.config



我们在迁移到带有.Net Core的Azure Devops以部署到我们的预部署Windows服务器时遇到问题。这可能是由于缺乏对该平台的了解,但尽管如此。。。

我们试图解决的问题是在遵循";一次构建,处处部署";结构,我们如何转换web.config文件以设置";ASPNETCORE_环境";env变量添加到正在部署的正确环境中。目前,我们的应用程序需要该变量集,因为我们的appsettings分为两个文件,appsettings.json和appsettings.Env.json,其中Env是我们部署到的当前环境(Dev或Prod(。

例如:Azure Pipelines构建我们的项目,输出工件中的web.config结果将ASPNETCORE_ENVIRONMENT变量设置为";开发";。这很好,因为我们随后将该工件部署到我们的开发环境中。但是,当我们把它发布到我们的刺激阶段时,会发生什么呢?该web.config仍然将ASPNETCORE_ ENVIRONMENT变量设置为";开发";。

转换配置的正确方式(2021(是什么?我甚至不应该在web.config中使用该变量并更改我们与appSettings文件的交互方式吗?

我已经阅读了许多关于类似问题的文章和问题,但与ASPNETCORE_ENVIRONMENT env变量相关的文章和疑问并不多。有人说使用";替换令牌任务";。有人说使用配置转换(它们不适用于ASPNETCORE_ENVIRONMENT(。

不知道从这里去哪里。

我最近尝试的内容:

为每个发布环境的Azure网站部署转换web.config

基于Stage 的Azure管道配置转换

我在发布时生成的web.config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>

Azure管道文件

name: WebApp-$(Date:yyyyMMdd).$(rev:rr)
trigger:
branches:
include:
- master
variables:
major: 2
minor: 0
patch: 0
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
Parameters.WebsiteName: 'webapp'
jobs:
- job: Build  
pool:
vmImage: 'windows-latest'
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet restore'
inputs:
command: 'restore'
projects: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)WebApp.zip" /p:DeployIisAppPath="webapp" /p:EnvironmentName="Development"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: ArchiveFiles@2
displayName: 'Create Zip Archive'
inputs:
rootFolderOrFile: '$(build.artifactStagingDirectory)/'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildNumber).zip
replaceExistingArchive: true  
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: PublishBuildArtifacts@1
displayName: 'Web Artifact'

当你在这里使用web.config时,将environmentVariable设置为这个,如果用另一种方式处理这个,你就不需要这个了,比如在你想部署应用程序的地方设置这个。您可以在文档中找到更多信息-在ASP.NET Core中使用多个环境。但是,如果您仍然想通过web.config执行此操作,请检查此答案。

最新更新