asp.net - Web.config 构建与发布转换不起作用

我有一个 ASP.NET Web 应用程序项目,它通过 Entity Framework 连接到远程数据库。在调试期间(例如在我的本地计算机上运行项目),数据库的 IP 地址与发布期间不同(例如在将项目上传到我的网络服务器并从浏览器运行之后)。到目前为止,我一直手动更改 Web.config 文件中的数据库连接字符串以在两者之间切换(基本上我必须连接字符串,一个名为“Debug”,一个名为“Release”,我只是在部署时交换名称)。

现在我刚刚注意到应该可以通过 Web.config Transformation Syntax 让这种情况自动发生。您将修改后的连接字符串放在 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 处于 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,我可以访问数据库。然后我通过配置管理器将构建配置更改为发布。解决方案中的所有项目都设置为发布配置。然后我构建解决方案(仅通过构建,甚至通过完整的重建(例如清理、重建))。我将新建的 DLL 以及 Web.config 和 Web.Release.config 文件上传到网络服务器,当我尝试访问我无法访问的数据库时,它仍在尝试通过调试 IP 地址访问数据库因此找不到它...

似乎 Web.Release.config 文件被完全忽略了,或者至少连接字符串没有被替换。

我做错了什么?转换语法是否错误?我没有在 Release模式下正确构建应用程序吗?

最佳答案

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 -> 发布)发布到您的本地文件系统并从那里复制文件,或者使用您选择的其他部署方法。

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

https://stackoverflow.com/questions/14415614/

相关文章:

javascript - webpack common chunks 插件 vs webpack d

android - 在 IntelliJ IDEA 中加快 Android 项目构建时间

javascript - 如何防止 Visual Studio 2017 构建 JavaScript

visual-studio-2010 - Visual Studio 解决方案文件 - "Build

c - getopt.h : Compiling Linux C-Code in Windows

c - 如何链接到 C 中的静态库?

haskell - 使用 cabal 和 ghc 构建运行时标志

c# - Visual Studio 版本中 'Optimize code' 选项的好处

c# - 通过命令行构建 Visual Studio 项目

c - 如何在 Go 中构建发布版本的二进制文件?