在IIS中覆盖appsettings.json

时间:2019-10-13 15:15:43

标签: iis .net-core

我有一个.net核心Web项目,该项目正在发布到Windows(10或服务器)上的IIS。我似乎无法让IIS通过配置编辑器提供连接字符串。我希望在这里使用连接字符串,以免每次部署后都将其覆盖。

我尝试使用ASPNETCORE_ConnectionStrings__DefaultConnectionConnectionStrings:DefaultConnection,但是我都没有得到500错误,指出连接字符串不能为空。

我在这里想念什么?

这是我的Startup.cs文件的一部分:请注意,此应用程序是在默认配置为您完成此操作之前的一段时间。

 public class Startup
 {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddUserSecrets<Startup>()
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }
}

编辑:

我已经安装了一个全新的.Net Core 2.2应用程序。即使使用较新的程序/启动程序。连接字符串未通过。

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

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args) //<-- adds config.AddEnvironmentVariables();
                .UseStartup<Startup>();
    }

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为您需要从环境变量中删除ASPNETCORE_前缀(只是您的连接字符串而不是ASPNETCORE_ENVIRONMENT)。

我在这里查看环境变量配置提供程序的Microsoft源代码:https://github.com/aspnet/Configuration/blob/d469707ab18eef7ed0002f00175a9ad5b0f36250/src/Config.EnvironmentVariables/EnvironmentVariablesConfigurationProvider.cs

如果需要的话,它确实需要一个“前缀”,但是当我查看“ CreateDefaultBuilder”的源代码时:https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs#L177

它只是使用一个空的前缀参数来调用它,这意味着您根本不应该使用任何前缀:

config.AddEnvironmentVariables();

您当然可以手动将调用添加到具有所选前缀的AddEnvironmentVariables中,然后您也可以将其添加到环境变量中