Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iis Dotnet core-同一服务器上每个应用程序(进程)的环境变量_Iis_Asp.net Core - Fatal编程技术网

Iis Dotnet core-同一服务器上每个应用程序(进程)的环境变量

Iis Dotnet core-同一服务器上每个应用程序(进程)的环境变量,iis,asp.net-core,Iis,Asp.net Core,我们正在使用以下代码: if(env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这在本地开发和生产环境中非常有效,但是我们的CI/QA环境中存在一个问题,它们位于同一台服务器上 我们希望能够指定类似这样的内容,但是如何为每个应用程序设置环境变量?如果CI和QA在不同的服务器上,这将很容易解决 if(env.IsEnvironment("CI")) { app.UseDeveloperExceptionPage

我们正在使用以下代码:

if(env.IsDevelopment()) 
{
    app.UseDeveloperExceptionPage();
}
这在本地开发和生产环境中非常有效,但是我们的CI/QA环境中存在一个问题,它们位于同一台服务器上

我们希望能够指定类似这样的内容,但是如何为每个应用程序设置环境变量?如果CI和QA在不同的服务器上,这将很容易解决

if(env.IsEnvironment("CI")) 
{
    app.UseDeveloperExceptionPage();
}
我们还希望每个环境都有特定的appsettings.json,比如
appsettings.ci.json
appsettings.qa.json
,我知道这是环境变量的开箱即用

我确信这一定是一种为每个应用程序(进程)指定环境变量的方法,我只是不知道怎么做?:)


我们正在使用IIS托管我们的应用程序。

您可以覆盖
env.EnvironmentName
中的值,因为它具有公共setter,并且每个应用程序只能使用特定的环境变量组。假设APP1和APP2分别有两个变量,如
APP1\u ownevironment=“QA”
APP2\u ownevironment=“CI”

  • 当您通过调用
    .AddEnvironmentVariables()
    方法添加环境变量支持时,可以指定过滤器忽略所有没有特殊前缀的变量。比如说

        // APP1_ is the prefix that environment variable names must start with.
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "APP1_")
            .Build();
    
        env.EnvironmentName = config.GetValue<string>("OWNENVIRONMENT")};
    
        // here env.EnvironmentName has "QA" value so the appsettings.qa.json will be used 
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
    

  • 因此,您可以通过类比创建自己的
    IsQA()
    扩展方法,或者直接调用
    env.IsEnvironment(“QA”)

    我从dotnet核心松弛通道中的@davidfoll获得了帮助

    解决方案是将以下内容添加到
    web.config
    文件的
    aspNetCore
    部分

    <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" />
        <environmentVariable name="AnotherVariable" value="My Value" />
    </environmentVariables>
    

    环境变量是每个进程的,我想这是您想要的(CI和QA是同一个应用程序,但不同的进程)。但是,您的问题是两个进程都有相同的父进程(IIS),因此继承了相同的环境变量。感谢您的回答,我在@davidfowl的帮助下通过web.config解决了这个问题。看看我的答案。
    <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" />
        <environmentVariable name="AnotherVariable" value="My Value" />
    </environmentVariables>
    
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
        <environmentVariables>
            <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" />
            <environmentVariable name="AnotherVariable" value="My Value" />
        </environmentVariables>
    </aspNetCore>