在我的生产服务器上,我通过将以下内容添加到 /etc/environment
来设置环境变量:
ASPNETCORE_ENVIRONMENT=Production
我检查它在重启后用 printenv ASPNETCORE_ENVIRONMENT
记录了。
我的服务器是 Ubuntu 14.04,我使用的是 asp.net core 1.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 中,如下所示:
默认的 appsettings.json 仅具有用于日志记录的默认值,它不包含我正在提取的值。
我不知道是什么问题。
最佳答案
可能不太成功,但您可能已落入与我相同的陷阱。您需要在发布过程中显式包含基于环境的 appsettings.*.json
文件。我没有默认包含它们,但我还没有检查最新的项目模板以查看是否仍然如此。如果您还没有检查过 appsettings.Production.json
文件是否实际存在于您的生产服务器上,可能值得一看。
如果事实证明这是你的问题并且你仍在使用 project.json
那么如果你的看起来像我以前的那样,你需要添加这样的东西:
"publishOptions": {
"include": [
"wwwroot",
"appsettings.json",
"appsettings.*.json",
"web.config"
]
}
"appsettings.*.json"
条目很重要。
如果您已经升级到 csproj
那么 this link可能会帮助您确定新项目文件格式所需的内容。
关于c# - 无法将生产服务器设置为生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42482164/