首页 > 解决方案 > 如何在发布构建工件时设置变量值?

问题描述

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

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

标签: c#asp.net-core

解决方案


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

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

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

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

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

然后,当您使用该特定配置文件发布时,该环境将自动添加到Web.config您的配置文件中。但是,这只是获取Web.config. 实际发布的应用程序没有功能差异,您可以在事后轻松进入并将环境切换到其他环境。


推荐阅读