我有一个ASP.NET Web应用程序项目,通过Entity Framework连接到远程数据库。在调试期间(例如在本地计算机上运行项目时),与数据库的IP地址不同于发布后(例如在Web服务器上上传项目并从浏览器运行它时)。直到现在,我总是手动更改Web.config文件中的数据库连接字符串以在两者之间进行切换(基本上我有两个连接字符串,一个命名为'Debug',另一个命名为'Release',每当我部署时我只需交换名称)。
现在我刚刚注意到可以通过Web.config Transformation Syntax自动完成此操作,在Web.Release.config版本中放置修改后的连接字符串,然后在Release配置下构建DLL时应该使用它。
然而,这对我似乎不起作用...
这是常规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处于Release模式下,则应将“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,并且我可以访问数据库。 然后,我通过配置管理器将生成配置更改为发布。 解决方案中的所有项目都设置为发布配置。 然后我构建解决方案(仅通过Build或甚至通过完整重建(例如,清理,重建))。 我将新构建的DLL上传到Web服务器,以及Web.config和Web.Release.config文件,当我尝试访问数据库时,我无法访问它,因为它仍在尝试通过调试IP地址访问数据库,因此找不到...
似乎Web.Release.config文件完全被忽略了,或者至少没有替换连接字符串。
我做错了什么? 转换语法有误吗? 我没有正确地在发布模式下构建应用程序吗?