c# - 运行 .NET Core API Linux 环境启动配置文件
问题描述
所以我试图让 .NET Core API 应用程序在不同的环境设置下运行。我一直在阅读文档,据我所知,我已经按照说明进行操作。然而,当我在 VS 之外运行服务时,由于无法找到连接字符串,它会崩溃。我显然缺少一些基本的东西。
我在launchSettings.json
“开发”和“暂存”中设置了两个配置文件
"profiles": {
"IIS Express": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Development": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Staging": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
}
}
我有以下配置文件。
appsettings.json
appsettings.Development.json
appsettings.Staging.json
我的代码中也有以下代码Startup.cs
:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
当我调试它时,我可以看到它.AddJsonFile($"appsettings.{env.EnvironmentName}.json"
正在加载预期的文件。但是,当我将它发布到一个目录并尝试运行它时,它的connectionString
值是 us null
。
appsettings.json 不包含连接字符串的值。它位于两个环境相关文件中,定义如下:
"DefaultConnection": {
"ConnectionString":
"Server=name;Port=3307;Database=name;User Id=name;Password=name;"
},
由于这一切都在 VS 中工作,我确信这一切都是正确的。但是,当我尝试运行它时,BOOM!
dotnet MyDll.dll --launch-profile Staging
我刚刚注意到--launch-profile
它只适用于dotnet run
并且当我尝试运行应用程序时它正在寻找一个Production.json
文件。如何仅通过dotnet
命令而不是dotnet run
命令使用各种配置文件?
解决方案
所以,经过一番摸索。看来你必须在服务器上设置环境变量,我错误地认为这是某种“运行时环境”变量,不,它是一个完整的操作系统级环境变量:
LINUX
export ASPNETCORE_ENVIRONMENT=暂存
电源外壳
$Env:ASPNETCORE_ENVIRONMENT="暂存"
视窗
设置 ASPNETCORE_ENVIRONMENT=暂存
推荐阅读
- python-3.x - 使用 webrtcvad 进行语音活动检测
- android - QT 中的未知模块:图表 - 为 Android 构建 QGroundControl 时出错
- ruby-on-rails - 获取 Rails 中 DelayedJob 的最后一个 run_at
- javascript - Javascript 可以检测到 POST 操作已完成吗?
- javascript - 重置循环 setTimeout()
- pyspark - py spark成功写入无效日期但读取时抛出异常
- r - 将数字添加到数据帧中的所有零并进行对数转换
- node.js - 通过事件网关异步回答 Alexa Smart Home Skill 时,如何回答 AWS Lambda?
- sas - 如何为 SAS 中的每个类生成不同的协方差矩阵?
- jquery - 如何在javascript中以最佳方式从给定的字符串“交货时间(上午8点 - 下午5点)”中获取“(上午8点 - 下午5点)”?