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
C# Can';t将生产服务器设置为生产服务器_C#_Asp.net Core - Fatal编程技术网

C# Can';t将生产服务器设置为生产服务器

C# Can';t将生产服务器设置为生产服务器,c#,asp.net-core,C#,Asp.net Core,在我的生产服务器上,我通过将以下内容添加到/etc/environment,设置了环境变量: ASPNETCORE_ENVIRONMENT=Production 重新启动后,我用printenv ASPNETCORE\u环境检查它是否已录制 我的服务器是Ubuntu14.04,我使用的是asp.NETCore1.1 它正在加载我的appsettings.Development.json,而不是appsettings.Production.json 这是我的startup.cs构造函数

在我的生产服务器上,我通过将以下内容添加到
/etc/environment
,设置了环境变量:

 ASPNETCORE_ENVIRONMENT=Production
重新启动后,我用
printenv ASPNETCORE\u环境
检查它是否已录制

我的服务器是Ubuntu14.04,我使用的是asp.NETCore1.1

它正在加载我的
appsettings.Development.json
,而不是
appsettings.Production.json

这是我的startup.cs构造函数

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }
在我的日志文件中,我可以正确地看到它说的是
Hosting environment:Production
,但如果我从配置文件中输出要查看的值,那么它就是
appsettings.Development.json
内容中的值

我甚至试着从服务器中删除appsettings.Development.json,重新启动整个服务器,但它仍然提取相同的值,我想它一定是在某个地方编译的

我还尝试将此添加到.csproj:

  <ItemGroup>
    <None Include="appsettings.*.json" CopyToPublishDirectory="Always" />
  </ItemGroup>

我的设置文件嵌套在VS2017中,如下所示:

  "publishOptions": {
    "include": [
      "wwwroot",
      "appsettings.json",
      "appsettings.*.json",
      "web.config"
    ]
  }

默认的appsettings.json只有一个用于日志记录的defualt值,它不包含我正在提取的值


我无法找出问题所在。

请仔细检查
ASPNETCORE\u环境
在启动应用程序时的值。例如,如果在开始日志中看到
托管环境:开发
,则该值不适用于此过程


请注意,
export
set variable
ONLY
用于当前shell以及从当前shell启动的所有进程。对于永久性设置,您需要修改
.bashrc

可能需要很长时间,但您可能已经落入了与我相同的陷阱。在发布过程中,您需要显式地包含基于环境的
appsettings.*.json
文件。默认情况下,我没有将它们包括在内,尽管我还没有检查最新的项目模板,看看这是否仍然正确。如果尚未检查生产服务器上是否存在
appsettings.Production.json
文件,可能值得一看

如果发现这是您的问题,而您仍在使用
project.json
,那么如果您的问题与我的问题类似,您需要添加如下内容:

  "publishOptions": {
    "include": [
      "wwwroot",
      "appsettings.json",
      "appsettings.*.json",
      "web.config"
    ]
  }
其中重要的是
“appsettings.*.json”
条目


如果您已升级到
csproj
,则可能会帮助您确定新项目文件格式中所需的内容。

我已将其添加到/etc/environment,因此它是永久性的,并已通过重新启动确认。日志文件中写着“Hosting environment:Production”,所以我想一定是因为其他原因,它加载了错误的json文件?我使用的是csproj。我没有明确地添加它们,但是它们被复制到发布目录。奇怪的是,即使我删除了
appsettings.Development.json
我的视图仍然输出
appsettings.Development.json
中的值,即使它不再存在(即使重新启动)。我想它正在某个地方编译。我尝试将``添加到csproj项目组,但它没有改变任何内容,它仍然需要开发值。@Guerrilla您的基本
appsettings.json
,如果您有一个的话?我有一个,在OP中链接了图片。它只是保存了一个用于日志记录的默认值。我已将所有设置添加到开发和生产文件中。@Guerrilla我觉得一切正常,如果您看到的是
托管环境:生产
,我有点不知所措。事实上,删除开发版本的设置会在重新启动后继续使用这些设置,这对我来说意义重大。您是否检查了服务器上的
appsettings.Production.json
文件的内容以确保它们是正确的?结果是多种因素的组合。缓存保留旧消息,kestrel在没有完全重新启动的情况下无法正确重新启动,并且我的代码中存在错误。谢谢你们的帮助,你们是完全正确的,问题一直在别处。很抱歉给您添麻烦。@请不要在web.config中设置任何引用环境的内容