现在我只是注意到,应该可以通过Web.config Transformation Syntax将自动修改的连接字符串放在Web.Release.config版本中,然后在DLL被安装在Release配置下时使用。
但是对我来说似乎不起作用
这是我的常规Web.config文件的相关部分(它保存本地使用的调试连接字符串):
<?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,我可以访问数据库。然后,我通过配置管理器将构建配置更改为Release。解决方案中的所有项目都设置为Release配置。然后我构建解决方案(只需通过构建,甚至通过完整的重建(例如清理,重建))。我将新建的DLL上传到Web服务器,以及Web.config和Web.Release.config文件,当我尝试访问数据库时,我仍然无法通过调试IP地址访问数据库因此找不到它…
看来Web.Release.config文件完全被忽略,或至少连接字符串没有被替换。
我究竟做错了什么?转换语法是否错误?我没有正确地在发布模式下构建应用程序吗?
感谢任何帮助…
解决方法
Then I Build the solution (just via Build or even via a complete
rebuild (e.g. Clean,Rebuild)). I upload the newly built DLLs to the
webserver,as well as the Web.config and Web.Release.config files
有你的错误:如果您简单地构建,Web配置转换将不适用于您的本地环境。你需要发布。
您的部署过程似乎很奇怪:您只是复制DLL,Web.config和web.Release.config。对我来说,似乎你复制了你的源代码而不是编译的应用程序。已发布的WebApplication不包含web.release.config。
您应该将您的项目(右键单击WebApplication – > Publish)发布到本地文件系统,然后从中复制文件,或使用您选择的其他部署方法。
2年前,我写了一篇关于web.config转换的文章。它为您提供了VS 2010(VS 2012中发布对话框更改)的分步教程:http://www.tomot.de/en-us/article/5/asp.net/how-to-use-web.config-transforms-to-replace-appsettings-and-connectionstrings