2016-12-22 12 views
4

私のappsettings.production.jsonファイルで接続文字列を使用するように私の公開ASP.netコアアプリケーションを取得できません。appsettings.production.jsonから接続文字列を取得できない

私は、開発およびプロダクションプロファイルにASPNETCORE_ENVIRONMENT環境変数を使用するようにlaunchSettingsを設定しました。プロファイルを切り替えてVisual Studioで実行すると、接続文字列が正しく変更されます。

私のUbuntuサーバーで公開アプリケーションを実行すると、切り替えられません。 ASPNETCORE_ENVIRONMENT変数をサーバー上の "Production"に設定しました。 appSettings.jsonとappSettings.production.jsonの両方がアプリケーションのルートディレクトリに存在することも確認しました。

マイappsettings.jsonファイル:

{ 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
    } 
    }, 
    "ConnectionStrings": { 
    "DefaultConnection": "server=localhost;user id=root;password=dev;database=testdb;sslmode=none", 
    } 
} 

私appsettings.production.jsonファイル:

{ 
    "ConnectionStrings": { 
    "DefaultConnection": "server=localhost;user id=root;password=prod;database=testdb;sslmode=none" 
    } 
} 

マイlaunchSettings.jsonファイル:

{ 
    "iisSettings": { 
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": { 
     "applicationUrl": "http://localhost:50824/", 
     "sslPort": 0 
    } 
    }, 
    "profiles": { 
    "IIS Express": { 
     "commandName": "IISExpress", 
     "launchBrowser": true, 
     "launchUrl": "home/index", 
     "environmentVariables": { 
     "ASPNETCORE_ENVIRONMENT": "Development" 
     } 
    }, 
    "IIS Express (Production)": { 
     "commandName": "IISExpress", 
     "launchBrowser": true, 
     "launchUrl": "home/index", 
     "environmentVariables": { 
     "ASPNETCORE_ENVIRONMENT": "Production" 
     } 
    } 
    } 
} 

マイStartup.cs:

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); 

    if (env.IsEnvironment("Development")) 
    { 
     // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. 
     builder.AddApplicationInsightsSettings(developerMode: true); 
    } 

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


    Console.WriteLine("Root Path: " + env.ContentRootPath); 
    Console.WriteLine("Connection String: " + Configuration.GetConnectionString("DefaultConnection")); 
} 

私はすでに、これらの質問を参照したが、運:

asp.net core 1 appsettings.production.json not updating connection strings

dotnet publish doesn´t publish correct appsettings.{env.EnvironmentName}.json

答えて

2

それはofficial documentationに、この "注意" 結局のところは非常に重要ではありません:Windowsでは

指定された環境名が大文字小文字の場合は です。変数をDevelopmentに設定するか、 開発またはDEVELOPMENTに設定するかによって、結果は同じになります。ただし、 Linuxではデフォルトで大文字と小文字が区別されます。環境変数、ファイル の名前と設定は、ベストプラクティスのために大文字と小文字を区別する必要があります。

主にラインは「Linuxは、デフォルトでは大文字と小文字を区別OSである」!!!!!うわー:)

私は自分の環境変数を "Production"ではなく "production"に変更しました。

さらに説明:

キーがStartup.csスタートアップメソッドでのコード行を理解している:

.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 

それはあなたの環境変数と{env.EnvironmentName}を置き換えますので、もしあなたがLinuxで動作しているなら、あなたのファイル名と正確に一致する必要があります。私の場合は "appSettings.production.json"なので、ASPNETCORE_ENVIRONMENTは "production"でなければなりません。

関連する問題