我有一个 ASP.NET Web 应用程序项目,它通过实体框架连接到远程数据库。在调试期间(例如在我的本地计算机上运行项目),数据库的 IP 地址与发布期间不同(例如在将项目上传到我的网络服务器并从浏览器运行之后)。到目前为止,我一直手动更改 Web.config 文件中的数据库连接字符串以在两者之间切换(基本上我必须连接字符串,一个名为“Debug”,一个名为“Release”,我只是在部署时交换名称)。
现在我刚刚注意到应该可以通过Web.config 转换语法让这种情况自动发生,您将修改后的连接字符串放在 Web.Release.config 版本中,然后当 DLL 在 Release 配置下构建时它应该使用它.
然而它似乎对我不起作用......
这是我的常规 Web.config 文件的相关部分(其中包含本地使用的 Debug 连接字符串):
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<!-- Debug connection string. Release connection string is in Web.Release.config file -->
<add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
这是 Web.Release.config 文件,根据示例,如果 DLL 处于发布模式,则应将“DatabaseEntities”连接字符串“A”替换为“B”:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
<connectionStrings>
<add name="DatabaseEntities"
connectionString="B"
xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
(显然“A”和“B”只是我真实连接字符串的占位符)
当我调试应用程序(例如,只需按 F5)时,使用默认的 Web.config,我可以访问数据库。然后我通过配置管理器将构建配置更改为发布。解决方案中的所有项目都设置为发布配置。然后我构建解决方案(仅通过构建,甚至通过完整的重建(例如清理、重建))。我将新建的 DLL 以及 Web.config 和 Web.Release.config 文件上传到网络服务器,当我尝试访问我无法访问的数据库时,它仍在尝试通过调试 IP 地址访问数据库因此找不到它...
似乎 Web.Release.config 文件被完全忽略了,或者至少连接字符串没有被替换。
我究竟做错了什么?转换语法是否错误?我没有在发布模式下正确构建应用程序吗?