4

我正在使用 XML-Document-Transform 转换我的 web.config 文件以部署到登台服务器。不幸的是,它并没有完全按照指定的方式进行转换,而是在元素的文本中添加了一些空格。然后这个空白被我使用的 Castle Windsor 配置拾取并轰炸应用程序。

这是一个例子:

网络配置:

<configuration>
  <castle>
    <properties>
      <serverUrl>http://test</serverUrl>
    <properties>
    <components>
      <component id="MyService">
        <parameters>
          <Url>#{serverUrl}/MyService.asmx</Url>
        </parameters>
      </component>
    </components>
  <castle>
<configuration>

web.staging.config:

<configuration>
  <castle>
    <properties>
      <serverUrl xdt:Transform="Replace">http://staging</serverUrl>
    <properties>
  <castle>
<configuration>

输出 web.config:

<configuration>
  <castle>
    <properties>
      <serverUrl>http://staging
      </serverUrl>
    <properties>
    <components>
      <component id="MyService">
        <parameters>
          <Url>#{serverUrl}/MyService.asmx</Url>
        </parameters>
      </component>
    </components>
  <castle>
<configuration>

如您所见serverUrl,转换已将额外的空格插入到元素中。

不幸的是,Castle 在将 插入创建无效 URL 的服务时包含serverUrl空格Url

还有人遇到这个吗?任何人都有一个仍然使用新的 Microsoft 转换方法但不会导致插入额外空格的解决方案?

恕我直言,这是转换过程中的一个错误,尽管 Castle 可能也应该忽略空格。

非常感谢,罗布

4

2 回答 2

2

这已在 Visual Studio 2010 SP1 中修复,并且是 Microsoft.Web.Publishing.Tasks.dll 和相关 *.target 文件的问题。如果您使用的构建服务器没有安装 Visual Studio SP1 但正在使用 MsBuild,那么您应该确保复制这些文件。

要解决此问题,请将安装了 SP1 的计算机上的所有内容从 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web 复制到构建服务器上的同一目录中。

于 2011-12-06T14:49:11.773 回答
1

此问题也会影响applicationSettings,但我可以通过按照您的建议修剪空白来解决它。这是我的 Settings.cs 文件。

internal sealed partial class Settings
{
    public override object this[string propertyName]
    {
        get
        {
            // trim the value if it's a string
            string value = base[propertyName] as string;
            if (value != null)
            {
                return value.Trim();
            }

            return base[propertyName];
        }
        set { base[propertyName] = value; }
    }
}

恐怕这不会帮助您解决 Castle 的问题,但也许它会帮助其他人!

于 2010-06-25T13:58:56.860 回答