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
Asp.net core 调试时进入ConfigurationBuilder对象的appsettings值错误_Asp.net Core - Fatal编程技术网

Asp.net core 调试时进入ConfigurationBuilder对象的appsettings值错误

Asp.net core 调试时进入ConfigurationBuilder对象的appsettings值错误,asp.net-core,Asp.net Core,我正在运行一个.net core控制台应用程序,托管着aspnet core运行时。我正在使用3种不同的环境-Debug、Dev和Prod及其关联的appsettings json文件。所以我使用的是Startup类,但即使在使用启动代码之前,WebhostBuilder也已经安装好了。从文档中: 如果相同键的值由相同或不同的 在配置提供程序中,键上设置的最后一个值是 用过 好的,很好,也许我真的不明白正确的设置是如何进入config对象的,但请看下面我是如何添加根appsettings js

我正在运行一个.net core控制台应用程序,托管着aspnet core运行时。我正在使用3种不同的环境-Debug、Dev和Prod及其关联的appsettings json文件。所以我使用的是Startup类,但即使在使用启动代码之前,WebhostBuilder也已经安装好了。从文档中:

如果相同键的值由相同或不同的 在配置提供程序中,键上设置的最后一个值是 用过

好的,很好,也许我真的不明白正确的设置是如何进入config对象的,但请看下面我是如何添加根appsettings json文件的,然后是环境特定的文件,这似乎是可行的。 因此,最多应该引用两个appsettings和值 但是,稍后当配置对象被注入到我的启动类中的一个服务中时,我试图从配置对象中提取的值就不存在了。因为我的环境变量是Debug,所以它应该从appsettings.Debug.json文件中的值读取

在appsettings.json中

-not there-
在appsettings.debug.json中

"AppSettings": {
  "CustomerFilesRoot": "\\\\dev-haulops1\\d$\\BoxFiles",
另外,当我进入我的一个服务并查看已注入的配置对象时,我看到4个Json配置提供程序?为什么是4而不是2?深入到这些,appsettings.debug.json和appsettings.json中各有2个。我显然错过了什么

在我的程序中.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)                
                .ConfigureLogging((hostingContext, logging) =>
                {
                    logging.AddEventLog();
                })
                .ConfigureAppConfiguration((context, config) =>
                {

                    // Configure the app here.
                    var env = context.HostingEnvironment;
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                                      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

                })
                .UseStartup<Startup>();
[更新] 不确定是否有人注意到,我使用的是WebHost而不是普通主机,所以就像使用web应用一样,不需要添加appsettings文件。例如,在一个网络应用程序中,我有。因此,我仍在挠头,为什么在一个恰好使用aspcore运行时和WebHost的控制台应用程序中,它至少没有尝试使用与launchsettings.json文件中设置的环境变量相关联的文件。当我显式加载两个appsettings文件时,我在debugtime将它们作为configurationproviders加载,我可以看到两个,而不是前面提到的4个。问题是,当我从config对象提取一个值时,它会从文件中给我一个与环境变量不匹配的值

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

好吧,乍一看你缺少配置 不要忘记调用config.AddEnvironmentVariables;这将添加环境变量

.ConfigureAppConfiguration((context, config) =>
            {

                // Configure the app here.
                var env = context.HostingEnvironment;
                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                config.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
                config.AddEnvironmentVariables();
            })

为了便于参考,appsetting.json中的配置将按照与使用AddJsonFile加载的文件相反的顺序进行引用。换句话说,在您的案例中,将搜索appsettings.{env.env.Environment.json}以查找CustomerFilesRoot,如果找到,则立即返回值,如果没有,则将搜索appsettings.json以查找该值。

好吧,乍一看,您缺少配置 不要忘记调用config.AddEnvironmentVariables;这将添加环境变量

.ConfigureAppConfiguration((context, config) =>
            {

                // Configure the app here.
                var env = context.HostingEnvironment;
                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                config.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
                config.AddEnvironmentVariables();
            })

为了便于参考,appsetting.json中的配置将按照与使用AddJsonFile加载的文件相反的顺序进行引用。换句话说,在您的案例中,appsettings.{env.Environment.json}将搜索CustomerFilesRoot,如果找到,则立即返回值,如果没有,则appsettings.json将搜索该值。

您没有显示此部分,因此我不确定您是否正在执行此操作。但请确保您正在设置ASPNETCORE_环境变量

由于您使用的环境名称与开发、登台和生产环境不同,因此需要显式设置环境名称。有很多方法可以做到这一点。与launchSettings.json文件类似,例如:

参考文献:

但最终,您将需要确定当前运行的机器,并根据信息ASPNETCORE_ENVIRONMENT=Debug设置ASPNETCORE_环境变量


我认为在您这样做之前,IHostingEnvironment.Environment Name的行为将与您预期的不同。

您没有显示此部分,因此我不确定您是否正在执行此操作。但请确保您正在设置ASPNETCORE_环境变量

由于您使用的环境名称与开发、登台和生产环境不同,因此需要显式设置环境名称。有很多方法可以做到这一点。与launchSettings.json文件类似,例如:

参考文献:

但最终,您将需要确定当前运行的机器,并根据信息ASPNETCORE_ENVIRONMENT=Debug设置ASPNETCORE_环境变量


我想在你这么做之前,我的名字会和你想象的不一样。

赞美上帝,我发现了。事实证明appsettings.Debug.json文件毕竟存在问题。我当时正演这部电影。 配置正在将其全部拾取 ng,但设置的结构不同。然后我回忆起我从另一个项目复制了这些文件

看到区别了吗? 我读到的是:

  "JobSettings" {
      "SomethingHere" : "test",
      "AppSettings": {
        "setting1" : "val1"
      }
  }
  "JobSettings" {
      "SomethingHere" : "test",
  } ,
  "AppSettings": {
    "setting1" : "val1"
  }   
我想我读的是:

  "JobSettings" {
      "SomethingHere" : "test",
      "AppSettings": {
        "setting1" : "val1"
      }
  }
  "JobSettings" {
      "SomethingHere" : "test",
  } ,
  "AppSettings": {
    "setting1" : "val1"
  }   
如果有人正在关注同一问题,请检查以下内容: 1您是否设置了环境变量,并且是否已将其提取? 在启动构造函数中设置断点并检查environemnt.EnvironmentName
2仔细查看应用程序设置文件。您是否确实有一个文件具有appsettings.{environment}.json格式的匹配环境名称?您是否试图读取与代码所引用位置相同的值?

赞美上帝,我找到了。事实证明appsettings.Debug.json文件毕竟存在问题。我当时正演这部电影。 配置一直在进行,但设置的结构不同。然后我回忆起我从另一个项目复制了这些文件

看到区别了吗? 我读到的是:

  "JobSettings" {
      "SomethingHere" : "test",
      "AppSettings": {
        "setting1" : "val1"
      }
  }
  "JobSettings" {
      "SomethingHere" : "test",
  } ,
  "AppSettings": {
    "setting1" : "val1"
  }   
我想我读的是:

  "JobSettings" {
      "SomethingHere" : "test",
      "AppSettings": {
        "setting1" : "val1"
      }
  }
  "JobSettings" {
      "SomethingHere" : "test",
  } ,
  "AppSettings": {
    "setting1" : "val1"
  }   
如果有人正在关注同一问题,请检查以下内容: 1您是否设置了环境变量,并且是否已将其提取? 在启动构造函数中设置断点并检查environemnt.EnvironmentName
2仔细查看应用程序设置文件。您是否确实有一个文件具有appsettings.{environment}.json格式的匹配环境名称?您正在尝试读取与代码尝试引用的位置相同的值吗?

由于引用的是appsettings.json中的值,而不是特定于环境的文件中的值,因此仍然存在一些错误。奇怪的是,当我发布到一个文件夹时,它会按预期工作。只是调试时没有。有些地方仍然不正确,因为引用的是appsettings.json中的值,而不是特定于环境的文件。奇怪的是,当我发布到一个文件夹时,它会按预期工作。只是调试时没有。是的,我在launchsettings中设置它,我在launchsettings中设置它