16

我做了一个web.config完整的文件,它没有显示 XML 错误)

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <configSections>
      ...
      <location path="." inheritInChildApplications="false">
        <connectionStrings>
          <add name="ElmahLog" connectionString="data source=~/App_Data/Error.db" />
          <add name="database" connectionString="w" providerName="System.Data.EntityClient"/>
        </connectionStrings>
      </location>
  ...

带有转换文件 ( web.Staging.config)

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="database"
      connectionString="c"
      providerName="System.Data.EntityClient"
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
  </connectionStrings>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <customErrors defaultRedirect="error.aspx"
      mode="RemoteOnly" xdt:Transform="Replace">
    </customErrors>
  </system.web>
</configuration>

我正在以Staging模式发布(右键单击网站 > 发布 > 方法:文件系统 ...)

------ Build started: Project: Drawing, Configuration: Staging Any CPU ------
  Drawing -> D:\Project\bin\Staging\Drawing.dll
------ Build started: Project: MySystem, Configuration: Staging Any CPU ------
  MySystem -> D:\Project\bin\Staging\MySystem.dll
...

但是当我查看web.config输出文件夹中的时,它并没有改变。

我在构建日志中发现了以下内容:

D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
Transformed web.config using Web.Staging.config into obj\Staging\TransformWebConfig\transformed\web.config.

可能是什么问题呢?我这样做对吗?

4

7 回答 7

22

回答晚了,但也许我可以让别人头疼。在 Visual Studio 2013 中,有两个位置可以选择构建和部署的配置。配置管理器,然后再次使用 Publish Web,向导中名为“设置”的第三步允许您选择要使用的配置。如果您不选择新配置,它将使用所选配置的转换而不是您的配置。

于 2014-10-08T19:57:24.920 回答
17

我发现了两件事:

  • 您不能在<configuration>标签上设置命名空间(例如: for <location path="." inheritInChildApplications="false">
  • 您必须注意转换文件中的正确层次结构。

喜欢

<configuration>
  <location>
    <connectionStrings>

代替

<configuration>
  <connectionStrings>
于 2011-04-01T13:22:46.633 回答
6

确保在 Web.Config 文件的属性中Build Action设置为Content.

如果构建操作设置为None,它不会被转换,即使它被复制到输出目录。

于 2016-02-17T20:10:43.040 回答
3

InsertIfMissing如果您尝试添加的部分尚未出现在输出中,请确保包括在内。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>

      <security xdt:Transform="InsertIfMissing">
        <requestFiltering allowDoubleEscaping="true" />
      </security>

    </system.webServer>
  </location>
</configuration>
于 2020-02-28T19:10:48.577 回答
0

回答也很晚,但这可能会对某人有所帮助。

我意识到,如果您在同一个解决方案中有两个网站,当您尝试发布其中一个网站时,如果您对两个项目都只有一个配置,则转换可能不起作用。

我的一个网站总是在转型,但另一个有时是,有时不是。

例如,我在解决方案中有配置“Auto”,并且两个网站都有 web.Auto.config。

我通过创建一个不同名称的新配置来解决这个问题 - “AutoAdmin” - 还为第二个项目创建了它的 web.AutoAdmin.config 文件,当我再次发布它时,转换终于发生了。

于 2015-03-12T17:06:54.493 回答
0

不要忘记从原始“web.config”中复制“配置”的所有其他属性,因为VS2012似乎不会自动完成,当然不会有匹配...

于 2013-05-23T09:02:41.350 回答
0

我按照以下步骤解决了这个问题。谢谢,@michaelhawkins 指出了正确的方向。您需要确保将配置更改为在两个地方发布。

在此处输入图像描述

然后右键单击您的项目并选择“属性”。如果不工作尝试在 CPU 架构中选择 x86

在此处输入图像描述

于 2019-07-24T08:48:17.667 回答