c# - 如何在发布构建工件时设置变量值?
问题描述
下面是我用来从appsettings.json
文件中读取 AppName 的代码片段。
Startup.cs → ConfigureServices()
services.Configure<CustomConfig>(Configuration.GetSection("CustomConfig"));
services.AddSingleton(resolver => resolver.GetRequiredService<IOptions<CustomConfig>>().Value);
自定义配置文件
public class CustomConfig
{
public string AppName { get; set; }
}
但我的要求是,AppName
会根据不同的客户而变化,但同时不应该在appsettings.json
文件中维护。
所以我的问题是,如何在发布应用程序时设置变量值,而不是从配置文件/环境级变量中读取它?
解决方案
ASP.NET Core 不使用构建配置,并且发布的代码并不特定于任何类型的环境。这是设计使然。您最好的选择是可能为每个客户分配自己的环境。然后,您可以拥有特定于客户的 appsettings.json 文件:appsettings.Customer1.json
、appsettings.Customer2.json
等。
实际使用的环境通常由ASPNETCORE_ENVIRONMENT
环境变量控制,尽管还有其他方法可以指定环境。根据您最终托管的方式,执行此操作的最佳方法会有所不同。如果您在容器或 Azure 应用服务之类的东西中运行,那么只需坚持使用ASPNETCORE_ENVIRONMENT
环境变量,可以轻松地为每个正在运行的实例设置它。
如果您直接从命令行启动应用程序,则可以--environment
在调用 running 时通过命令行参数传递环境dotnet
。
例如,如果您将这些都托管在同一个 IIS 服务器上,那么您可以将其添加到 Web.config,但您可能需要一个比这更强大的解决方案。如果您为每个客户创建发布配置文件,则可以将以下内容添加到每个发布配置文件 ( .pubxml
):
<PropertyGroup>
<EnvironmentName>Customer1</EnvironmentName>
</PropertyGroup>
然后,当您使用该特定配置文件发布时,该环境将自动添加到Web.config
您的配置文件中。但是,这只是获取Web.config
. 实际发布的应用程序没有功能差异,您可以在事后轻松进入并将环境切换到其他环境。
推荐阅读
- maven - 无法使用 maven 命令使用 gatling conf
- asp.net-mvc - 带有下划线 (_) 的表的实体单数化问题
- socket.io - Socket.IO 聊天不显示消息
- java - Amstrong 数字返回空白结果(java)
- android - Kotlin-Android扫描二维码失败?
- mysql - 运行 alter table 以删除约束时,约束在此位置无效
- apache-commons-vfs - 'commons-vfs2',未添加到 fatJar
- mongodb - try_join 使 mongodb 事务同时发送
- python-3.10 - 如何解决vscode中不和谐的reportMissingImports
- python - 如何在 Python 中将奇怪的 unicode 字符(“故障”文本)转换为常规文本?