我正在尝试将所有连接字符串移动到外部文件,但我无法让我们的生产应用程序运行 - 发布时我们收到一条错误消息:
**
Web.config 连接字符串参数不能为 null 或为空。
**
我想知道发布转换是否不起作用。
仅供参考 - 我们将所有文件属性设置为
Copy To Output Directory
至 Copy Always
我们有 5 个文件 -
1) Web.config
2) Web.Release.config
3) Web.Debug.config
4) Configurations\Debug.Conn.config
5) Configurations\Release.Conn.config
对于开发: (这有效)
Web.config
& Web.Debug.config
包含:
<connectionStrings configSource="Configurations\Debug.Conn.config" />
配置源指向我们的本地开发数据库并且正在运行:
Configurations\Debug.Conn.config:
<connectionStrings>
<add name="AppDB"
connectionString="Data Source=DESKTOP-ABCDEF;Initial Catalog=MyApp;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
对于生产: (这不起作用)
Web.Release.config
包含:
<connectionStrings xdt:Transform="Replace" configSource="Configurations\Release.Conn.config" />
configSource 指向我们的生产数据库。
Configurations\Release.Conn.config:
<connectionStrings>
<add name="AppDB" connectionString="Data Source= ... Production Database ... '" />
</connectionStrings>
--
首先:在我寻找答案的过程中,我只能找到有关使用 Web.config 主文件进行转换的帖子 - 几乎没有提到使用
configSource
使用外部文件
其次:当我删除外部文件并将数据直接放入 Web.config 文件中时,转换就会起作用 - 但这违背了我们想要做的事情的目的。
所以 - 我无法告诉生产数据库在发布时替换连接字符串缺少什么。
这篇文章解释得很好:
https://davidsekar.com/asp-net/vsts-replace-tokens-task-is-not-replacing-connectionstring
主要原因是您必须停用的默认配置