iis 使用特定于环境的应用程序部署Web应用程序设置

umuewwlo  于 2022-11-12  发布在  其他
关注(0)|答案(4)|浏览(146)

我目前正在部署一个Web应用程序,其中有一个用于生产的appsetting和一个用于测试的appsetting。在部署过程中,我如何将appsetting.json替换为生产或测试的内容?
要部署,我使用IIS Web应用程序管理器和IIS Web应用程序部署器。
我目前所做的是,每次将某个内容推送到main时,我都会设置Azure来触发

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  testConfiguration: 'Test'
  prodConfiguration: 'Production'

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(testConfiguration)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(prodConfiguration)'

- task: DotNetCoreCLI@2
  inputs:
   command: 'publish'
   publishWebProjects: true
   zipAfterPublish: true
   arguments: '--output $(build.artifactstagingdirectory)'

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

然后我使用drop to中创建的工件进行部署。当我想部署到我的测试或生产环境时,问题就会发生。
解决方案本身在appsetting.json上有一个转换,即appsetting.Test.json和appsetting.Production.json,但位于drop文件夹中的只是发布的prod构建,而不是同时包含test和prod。
如何将两者都包含在放置文件夹下?
因此,当我通过部署管道发布它时,可以指定我想要部署测试构建还是产品构建?

rxztt3cl

rxztt3cl2#

如果您不想进行变量替换,那么您可以有两个json副本,一个用于prod,一个用于test,然后使用下面描述的复制任务:https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml
你可以在你的部署yaml中添加拷贝,并根据阶段使用你需要的文件。在这个拷贝任务之后,你可以添加你的部署任务。

dxxyhpgq

dxxyhpgq3#

如果该问题说明appsetting.Test.json未包含在您的drop文件夹中,那么将下一节添加到您的.csproj中:

<ItemGroup>
   <None Include="appsettings.Test.json" CopyToPublishDirectory="Always" />
</ItemGroup>
r55awzrz

r55awzrz4#

在构建解决方案时,不要将appsettings.*.json文件转换为一个appsettings.json文件,而要确保两个原始文件都包含在放置文件夹中。如果您难以做到这一点,则需要在问题中包含有关csproj文件的更多详细信息。
在部署到IIS时,如果您在测试环境中,请确保将ASPNETCORE_ENVIRONMENT environment variable设置为test,以便应用正确的配置。
我也有一个类似的答案,专门处理使用这种方式切换环境:.NET核心3.1工作服务-发布时设置EnvironmentName

相关问题