Dotnet 不知道特定于环境的 appsettings 文件

Posted

技术标签:

【中文标题】Dotnet 不知道特定于环境的 appsettings 文件【英文标题】:Dotnet isn't aware of environment specific appsettings file 【发布时间】:2017-06-04 08:00:37 【问题描述】:

首先,这个问题与dotnet publish doesn´t publish correct appsettings.env.EnvironmentName.json 不同,我确信环境名称没有问题。

操作系统:linux(ubuntu 14.04)

dotnet --version: 1.0.3

Shell 脚本:

导出 ASPNETCORE_ENVIRONMENT=Cloud9

cd ../../src/项目

dotnet 恢复

dotnet publish -c Debug -o bin/Debug/out/

cp ../../.config/Project /appsettings.Cloud9.json bin/Debug/out/ #将设置文件复制到发布目录

dotnet bin/Debug/out/Project.dll --urls "http://0.0.0.0:8080"

当我在上面运行脚本时,它成功地为站点提供服务,但使用 appsettings.json 值而不是 appsettings.Cloud9.json

这是我的Startup.cs 构造函数和Program.cs

    //Sturtup.cs
    public IConfigurationRoot Configuration  get; 
    public Startup(ILoggerFactory loggerFactory, IHostingEnvironment environment)
    
        var builder = new ConfigurationBuilder()
            .SetBasePath(environment.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.environment.EnvironmentName.json", optional: true);

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    

    //Program.cs
    public static void Main(string[] args)
    
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>()
            .UseConfiguration(config)
            .Build();

        host.Run();
    

注意:如果我执行 dotnet run --urls ... 而不发布它会按预期运行。

第二点:我在 out 目录中看到了appsettings.Cloud9.json

【问题讨论】:

【参考方案1】:

添加cd ./bin/Debug/out后解决。所以正确的脚本是:

export ASPNETCORE_ENVIRONMENT=Cloud9
cd ../../src/Project
dotnet restore
dotnet publish -c Debug -o bin/Debug/out/  
cp ../../.config/Project /appsettings.Cloud9.json bin/Debug/out/

关键点:

cd ./bin/Debug/out
dotnet Project.dll --urls "http://0.0.0.0:8080"

【讨论】:

以上是关于Dotnet 不知道特定于环境的 appsettings 文件的主要内容,如果未能解决你的问题,请参考以下文章

Centos 7 安装 dotnet 环境

如何通过 FTP 发布 dotnet core web 后端?

持续部署环境中的 dotnet 语义版本控制

csharp 在dotnet中设置环境变量

如何在 .Net 核心应用程序中发布特定于环境的应用程序设置?

Worklight - 特定于环境的 CSS