Azure DevOps-.NET Core构建包含Web.config文件

时间:2018-11-17 19:45:31

标签: c# .net-core azure-devops azure-pipelines azure-pipelines-build-task

我正在使用Azure DevOps来构建.NET Core MVC Web应用程序并将其发布到AWS中的Windows Server 2016 EC2实例。

我有不同的环境,所以我创建了以下appsettings.json文件:

  • appsettings.DEV.json
  • appsettings.STG.json
  • appsettings.PRD.json

经过研究,我发现我们可以在web.config文件中设置ASPNETCORE_ENVIRONMENT变量:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\www.MyApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="[ENV]" />
      </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

然后我可以使用Program.cs中的以下代码加载相应的环境appsetting.json文件:

public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration(ConfigConfiguration)
                .UseStartup<Startup>();

        static void ConfigConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder config)
        {
            config.SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);

        }
    }

对于每个部署,我想控制要部署的web.config,以便可以控制ASPNETCORE_ENVIRONMENT的值。类似于传统ASP.NET环境中的web.config转换。

是否可以在Azure DevOps中或通过Visual Studio中的设置来执行此操作?我已经读到.NET Core 2.2将为此提供解决方案,但是与此同时可以做什么?

1 个答案:

答案 0 :(得分:2)

我正在使用标准的web.config转换(部署到IIS)

Azure DevOps deploy task

转换web.staging.config:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <aspNetCore>
        <environmentVariables>
          <environmentVariable xdt:Transform="Replace" xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Staging" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>