Использование преобразования XML-документов Microsoft для преобразования web.config добавляет ненужные пробелы - PullRequest
4 голосов
/ 27 мая 2010

Я использую XML-Document-Transform для преобразования моего файла web.config для развертывания на промежуточный сервер.К сожалению, он не преобразуется точно так, как указано, и добавляет некоторый пробел к тексту элемента.Этот пробел затем используется конфигурацией Castle Windsor, которую я использую, и бомбардировкой приложения.

Вот пример:

web.config:

<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 включает пробелы при вставке serverUrl в Url службы, которая создает недействительный URL.

Кто-нибудь еще сталкивался с этим?Кто-нибудь получил решение, которое все еще использует новый метод преобразования Microsoft, но не вызывает вставки дополнительных пробелов?

ИМХО, это ошибка в процессе преобразования, хотя Касл, вероятно, должен игнорировать также и пробелы.

Большое спасибо, Роб

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Это исправлено в Visual Studio 2010 SP1 и является проблемой с Microsoft.Web.Publishing.Tasks.dll и связанными файлами * .target. Если вы используете сервер сборки, на котором не установлен пакет обновления 1 для Visual Studio, но используется MsBuild, убедитесь, что вы скопировали эти файлы.

Чтобы решить эту проблему, скопируйте все с компьютера с установленным пакетом обновления 1 (SP1) из C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web в тот же каталог на сервере сборки.

1 голос
/ 25 июня 2010

Эта проблема также касается 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; }
    }
}

Боюсь, это не поможет вашей проблеме с Каслом, но, возможно, это поможет кому-то еще!

...