【问题标题】:Web.Config Transform not changing any valuesWeb.Config 转换不改变任何值
【发布时间】:2015-03-06 00:45:17
【问题描述】:

我正在尝试设置 web.config 转换来修改一些值。我正在使用 Octopus Deploy 给出的这个例子:

http://docs.octopusdeploy.com/display/OD/Configuration+files

web.config 的超精简版:

<?xml version="1.0" ?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

变换:

<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

输出:

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

我正在使用这个工具来预览转换: https://webconfigtransformationtester.apphb.com/

如您所见,它什么也没做。我看过很多例子,但显然我遗漏了一些东西。任何帮助将不胜感激。

(我也试过这个,但没有运气):

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
      <compilation debug="false" xdt:Transform="Replace">
      </compilation >
  </system.web>
</configuration>

【问题讨论】:

  • 你确定输入xml的命名空间吗?如果将其从 xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" 更改为 xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0",则 debug 属性将从输出中删除。
  • 谢谢你,Matthias,就是这样……我查看了大约 10 种不同的资源,但没有人提到我必须这样做。如果您想这样提交,我会将其标记为答案。
  • 真正令人沮丧的是,我使用 Visual Studio 自动生成转换文件。如果转换需要该部分,您会认为将其添加到原始 web.config 中会很聪明。
  • 无需更改原始 web.config
  • 是的,在示例中,这个 &lt;xdt:Import assembly="AppHarbor.TransformTester" namespace="AppHarbor.TransformTester.Transforms"/&gt; 似乎在转换中丢失了,因为它在 web.config 的 configuration 中没有任何命名空间的情况下工作。

标签: xml web-config-transform


【解决方案1】:

当您将 web.config 文件的命名空间从

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

<configuration xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0">

当这个变换时

<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

应用于调整后的 web.config

<?xml version="1.0" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation debug="true" targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

debug 属性已从结果中移除:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <system.web>
    <compilation targetFramework="4.0">
    </compilation>
  </system.web>
</configuration>

更新: 如 cmets 所述,web.config 文件的配置根本不应该有任何命名空间。相反,有必要添加这个导入

<xdt:Import assembly="AppHarbor.TransformTester" 
            namespace="AppHarbor.TransformTester.Transforms"/>

到转换文件(至少,在使用提到的在线转换测试仪进行测试时):

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<xdt:Import assembly="AppHarbor.TransformTester" 
     namespace="AppHarbor.TransformTester.Transforms"/>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
</configuration>

【讨论】:

  • 实际上,应该从 web.config 中的 &lt;configuration&gt; 元素中删除整个命名空间声明。 configuration 不在命名空间中。
  • @JohnSaunders 感谢您提供信息,刚刚在此处找到此信息:msdn.microsoft.com/en-us/library/ee248644%28v=vs.100%29.aspx(不知道它是否适用于此处使用的设置)。根据此处提到的示例给出答案:msdn.microsoft.com/en-us/library/dd465326.aspx
  • 你读错了例子。该页面上的所有示例都是转换文件,而不是 web.config 文件。
  • @JohnSaunders 所以转换在实际部署中可以在没有命名空间的情况下工作,并且只需要 OP 中提到的在线 web.config 转换测试器?刚刚在 web.config 中没有命名空间的情况下进行了测试,但它没有按预期工作。
  • 他们的示例在 web.config 中没有命名空间。见webconfigtransformationtester.apphb.com
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
相关资源
最近更新 更多