在我的生产服务器上,我通过将以下内容添加到/etc/environment
:
ASPNETCORE_ENVIRONMENT=Production
我检查了重启后用printenv ASPNETCORE_ENVIRONMENT
录制的内容。
我的服务器是Ubuntu 14.04,我使用的是asp.net核心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只有一个defualt值用于记录,它不包含我提取的值。
我无法弄清楚问题是什么。
答案 0 :(得分:3)
可能是远射,但你可能陷入了与我相同的陷阱。您需要在发布过程中明确包含基于环境的appsettings.*.json
文件。默认情况下,我没有包含它们,但我还没有检查最新的项目模板,看看它是否仍然存在。如果您尚未检查生成服务器上是否存在appsettings.Production.json
文件,则可能值得一看。
如果事实证明这是你的问题并且你还在使用project.json
,那么如果你看起来像我以前那样,那么你需要添加以下内容:
"publishOptions": {
"include": [
"wwwroot",
"appsettings.json",
"appsettings.*.json",
"web.config"
]
}
"appsettings.*.json"
条目是重要条目。
如果您已升级到csproj
,那么this link可能会帮助您找出新项目文件格式中您需要的内容。
答案 1 :(得分:0)
仔细检查启动应用程序时ASPNETCORE_ENVIRONMENT
的值。例如,如果在启动日志中看到Hosting environment: Development
,则表示此进程未设置该值。
请注意export
为当前shell设置变量ONLY
,并从当前shell启动所有进程。对于永久设置,您需要修改.bashrc
。