IIS WebサーバーでホストされているWebアプリケーション(本番環境、ステージング、テスト)を持っています。したがって、特定の値(たとえば、STAGING)に設定すると他のアプリケーションに影響を与えるため、ASPNETCORE_ENVIRONMENT operativeのシステム環境変数に依存することはできませんでした。
回避策として、私はvisualstudioソリューション内でカスタムファイル(envsettings.json)を定義しました。
次の内容で:
{
// Possible string values reported below. When empty it use ENV variable value or Visual Studio setting.
// - Production
// - Staging
// - Test
// - Development
"ASPNETCORE_ENVIRONMENT": ""
}
次に、アプリケーションの種類(運用、ステージング、またはテスト)に基づいて、このファイルを適切に設定します。テストアプリケーションを展開しているとすると、次のようになります。
"ASPNETCORE_ENVIRONMENT": "Test"
その後、Program.csファイルでこの値を取得し、webHostBuilderの環境を設定します。
public class Program
{
public static void Main(string[] args)
{
var currentDirectoryPath = Directory.GetCurrentDirectory();
var envSettingsPath = Path.Combine(currentDirectoryPath, "envsettings.json");
var envSettings = JObject.Parse(File.ReadAllText(envSettingsPath));
var enviromentValue = envSettings["ASPNETCORE_ENVIRONMENT"].ToString();
var webHostBuilder = new WebHostBuilder()
.UseKestrel()
.CaptureStartupErrors(true)
.UseSetting("detailedErrors", "true")
.UseContentRoot(currentDirectoryPath)
.UseIISIntegration()
.UseStartup<Startup>();
// If none is set it use Operative System hosting enviroment
if (!string.IsNullOrWhiteSpace(enviromentValue))
{
webHostBuilder.UseEnvironment(enviromentValue);
}
var host = webHostBuilder.Build();
host.Run();
}
}
envsettings.jsonをpublishOptions(project.json)に含めることを忘れないでください。
"publishOptions":
{
"include":
[
"wwwroot",
"Views",
"Areas/**/Views",
"envsettings.json",
"appsettings.json",
"appsettings*.json",
"web.config"
]
},
このソリューションにより、環境変数の値に関係なく、ASP.NET COREアプリケーションを同じIISで自由にホストできます。
Properties\launchSettings.json
をシミュレートするために引き続き使用できます。