发布构建工件时如何设置变量值?

时间:2019-03-13 09:05:25

标签: c# asp.net-core

下面是我用来从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文件中进行维护。

所以我的问题是,如何在发布应用程序时设置变量值,而不是从配置文件/环境级别变量中读取变量值?

1 个答案:

答案 0 :(得分:1)

ASP.NET Core不使用生成配置,并且已发布的代码并非特定于任何环境。 那是设计使然。最好的选择是为每个客户分配自己的环境。然后,您可以拥有客户特定的appsettings.json文件:appsettings.Customer1.jsonappsettings.Customer2.json等。

使用的实际环境通常由ASPNETCORE_ENVIRONMENT环境变量控制,尽管还有其他方法可以指定环境。根据最终托管方式的不同,执行此操作的最佳方法也有所不同。如果您在容器或类似Azure App Services之类的容器中运行,则只需坚持使用ASPNETCORE_ENVIRONMENT环境变量,该变量可以在每个正在运行的实例中轻松设置。

如果直接从命令行启动应用程序,则可以在调用运行--environment时通过dotnet命令行参数传递环境。

例如,如果将所有这些托管在同一IIS服务器上,则可以将其添加到Web.config中,但是您可能想要一个比此更强大的解决方案。如果您为每个客户创建发布配置文件,则可以将以下内容添加到每个发布配置文件(.pubxml):

<PropertyGroup>
  <EnvironmentName>Customer1</EnvironmentName>
</PropertyGroup>

然后,当您使用该特定配置文件进行发布时,该环境将自动添加到Web.config中。但是,这只是在Web.config中获取值的一种更自动化的方法。实际发布的应用程序没有功能上的差异,您可以很容易地了解事实,然后将环境切换到其他环境。