我正在将我的应用程序部署到生产服务器上的两个不同位置。一个用于生产,另一个用于演示。每个都有一个不同的数据库连接字符串。
我的三个连接字符串在
appsettings.json
中定义。我有一个用于生产,一个用于演示,一个用于本地测试。我一直在更改我的builder.configuration.getConnectionString('xxx')
文件中的program.cs
行以将其更改为所需的数据库。
当我发布时,似乎有一种方法可以选择连接字符串,但我无法让它工作。我单击“发布”、“显示所有设置”、“数据库”,它为我提供了一个连接字符串列表。我选中我想要的连接字符串的复选框并部署。它不会覆盖我上面提到的
program.cs
文件中的设置。
在查看有关此的文章时,我变得更加困惑。配置字符串似乎存储在多个位置(
appsettings.json
、web.config
和用户机密文件)。我的 web.config
文件中没有任何连接信息。我只想能够在我的发布配置文件中选择配置字符串。我能让它工作的唯一方法是在program.cs
中更改数据库,重新编译和部署。
我错过了什么?
我找不到关于发布部分的文档,您可以在其中选择数据库连接字符串。我已经搜索过了。
我正在使用 VS 2022.
您通常使用“环境”和特定于环境的配置文件来执行此操作。
所以你会有 one 连接字符串名称:
{
"ConnectionStrings": {
"DefaultConnection": "Server=X;Database=Y;Trusted_Connection=true;MultipleActiveResultSets=true;TrustServerCertificate=true"
}
}
并且该连接字符串配置存在于您的
appsettings.Development.json
中。然后您将拥有一个带有自己的连接字符串的appsettings.Production.json
,它仍在“DefaultConnection”(或您想要命名的任何名称)下。 appsettings.Production-Demo.json
也一样
然后在你的
.csproj
:
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
这将作为
ASPNETCORE_ENVIRONMENT
的环境变量包含在您的 web.config 中,它确定将加载哪个特定于环境的配置覆盖(除了基础 appsettings.json
之外)。
您可以在发布期间通过设置
/p:EnvironmentName=Production
或 /p:EnvironmentName=Production-Demo
来覆盖此环境名称。
或者您在实际的 Web 服务器部署期间以某种方式修改 web.config 中的
ASPNETCORE_ENVIRONMENT
值,例如使用 PowerShell。
参见: