下面是我用来从appsettings.json
文件读取AppName的代码段。
Startup.cs→ConfigureServices()
services.Configure<CustomConfig>(Configuration.GetSection("CustomConfig"));
services.AddSingleton(resolver => resolver.GetRequiredService<IOptions<CustomConfig>>().Value);
CustomConfig.cs
public class CustomConfig
{
public string AppName { get; set; }
}
但是我的要求是,AppName
将根据不同的客户而变化,但同时不应在appsettings.json
文件中进行维护。
所以我的问题是,如何在发布应用程序时设置变量值,而不是从配置文件/环境级别变量中读取变量值?
答案 0 :(得分:1)
ASP.NET Core不使用生成配置,并且已发布的代码并非特定于任何环境。 那是设计使然。最好的选择是为每个客户分配自己的环境。然后,您可以拥有客户特定的appsettings.json文件:appsettings.Customer1.json
,appsettings.Customer2.json
等。
使用的实际环境通常由ASPNETCORE_ENVIRONMENT
环境变量控制,尽管还有其他方法可以指定环境。根据最终托管方式的不同,执行此操作的最佳方法也有所不同。如果您在容器或类似Azure App Services之类的容器中运行,则只需坚持使用ASPNETCORE_ENVIRONMENT
环境变量,该变量可以在每个正在运行的实例中轻松设置。
如果直接从命令行启动应用程序,则可以在调用运行--environment
时通过dotnet
命令行参数传递环境。
例如,如果将所有这些托管在同一IIS服务器上,则可以将其添加到Web.config中,但是您可能想要一个比此更强大的解决方案。如果您为每个客户创建发布配置文件,则可以将以下内容添加到每个发布配置文件(.pubxml
):
<PropertyGroup>
<EnvironmentName>Customer1</EnvironmentName>
</PropertyGroup>
然后,当您使用该特定配置文件进行发布时,该环境将自动添加到Web.config
中。但是,这只是在Web.config
中获取值的一种更自动化的方法。实际发布的应用程序没有功能上的差异,您可以很容易地了解事实,然后将环境切换到其他环境。