连接字符串混淆

问题描述 投票:0回答:1

我正在将我的应用程序部署到生产服务器上的两个不同位置。一个用于生产,另一个用于演示。每个都有一个不同的数据库连接字符串。

我的三个连接字符串在

appsettings.json
中定义。我有一个用于生产,一个用于演示,一个用于本地测试。我一直在更改我的
builder.configuration.getConnectionString('xxx')
文件中的
program.cs
行以将其更改为所需的数据库。

当我发布时,似乎有一种方法可以选择连接字符串,但我无法让它工作。我单击“发布”、“显示所有设置”、“数据库”,它为我提供了一个连接字符串列表。我选中我想要的连接字符串的复选框并部署。它不会覆盖我上面提到的

program.cs
文件中的设置。

在查看有关此的文章时,我变得更加困惑。配置字符串似乎存储在多个位置(

appsettings.json
web.config
和用户机密文件)。我的
web.config
文件中没有任何连接信息。我只想能够在我的发布配置文件中选择配置字符串。我能让它工作的唯一方法是在
program.cs
中更改数据库,重新编译和部署。

我错过了什么?

我找不到关于发布部分的文档,您可以在其中选择数据库连接字符串。我已经搜索过了。

我正在使用 VS 2022.

asp.net-mvc
1个回答
0
投票

您通常使用“环境”和特定于环境的配置文件来执行此操作。

所以你会有 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。

参见:

© www.soinside.com 2019 - 2024. All rights reserved.