【问题标题】:Publish is not transforming web.config?发布没有改变 web.config?
【发布时间】:2020-02-29 03:10:48
【问题描述】:

我做了一个web.configfull file,它不显示 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.

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

【问题讨论】:

  • 发布时是为staging 还是release 构建的?
  • @Jimmy 正如构建日志所说,它正在Staging 中编译。 Release 有一个转换文件,但它也不起作用。
  • 您是否看到表明它正在执行转换的消息?就像我说的:“使用 Web.Beta.config 将 Web.config 转换为 obj\Beta\TransformWebConfig\transformed\Web.config。”
  • @Coding 是的,但是之前有一些错误,我刚刚注意到它...更新了我的问题...
  • 有没有机会发布有问题的 web.config 文件的第一部分?

标签: asp.net deployment .net-4.0 web-config web-config-transform


【解决方案1】:

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

【讨论】:

  • 你确实让我头疼。
  • 这才是真正的答案。
  • 在发布设置中,我的配置(发布)正确,但转换不起作用。我将其更改为调试,然后保存,然后将其更改回发布,它开始正常工作。谢谢指点!
【解决方案2】:

我发现了两件事:

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

喜欢

<configuration>
  <location>
    <connectionStrings>

代替

<configuration>
  <connectionStrings>

【讨论】:

  • 关于xmlns:实际上你可以使用它,但是你也必须将它添加到转换根标签中。没有 xmlns 它可以工作,但 VS 无法识别 inheritInChildApplications 属性。
【解决方案3】:

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

如果将构建操作设置为None,则不会对其进行转换,即使它正在被复制到输出目录。

【讨论】:

    【解决方案4】:

    如果您尝试添加的部分尚未出现在输出中,请确保包含 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>
    

    【讨论】:

      【解决方案5】:

      别忘了从原始的“web.config”中复制“configuration”的所有其他属性,因为VS2012似乎不会自动这样做,当然不会匹配......

      【讨论】:

      • 这不是真的。您可以仅指定正在更改的属性并指示转换仅更新属性(而不是替换元素):&lt;compilation debug="false" xdt:Transform="SetAttributes"/&gt;
      【解决方案6】:

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

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

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

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

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-23
          • 1970-01-01
          • 2012-01-18
          • 2015-10-22
          • 2018-09-22
          • 2019-05-23
          • 2011-08-14
          • 2016-10-21
          相关资源
          最近更新 更多