web.config transform - удалять комментарии из раздела connectionstring

18

Я храню несколько разных строк подключения в своем web.config для разработки и тестирования. Все, кроме одного, закомментированы, поэтому я могу изменить информацию по мере необходимости.

Когда я публикую, я хотел бы заменить все (включая комментарии) в узле connectionStrings следующим образом:

<add name="myDb" connectionString="Data Source={SERVER};Initial Catalog=ManEx;User Id={USER};Password={PASSWORD};" providerName="System.Data.SqlClient"  />
<!--<add name="myDb" connectionString="Data Source={SERVER};Initial Catalog=ManEx;Integrated Security=True" providerName="System.Data.SqlClient" />-->

Я знаю, как изменить активную строку следующим образом:

<add name="myDb"
     connectionString="Data Source={SERVER};Initial Catalog=ManEx;User Id={USER};Password={PASSWORD};"
     providerName="System.Data.SqlClient"
     xdt:Transform="Add" 
     xdt:Locator="Match(name)"/>

Но я не знаю, как очистить комментарии, которые я не хочу, и добавить комментарий, который я хочу.

Любые идеи?

    
задан davids 09.08.2014 в 00:38
источник
  • Замена / удаление / добавление комментариев на самом деле не является предполагаемым использованием преобразования. Избавьтесь от комментариев, поместите правильные строки подключения в правильные преобразования - и назовите это хорошо. –  Mike 09.08.2014 в 14:37
  • Мало того, что это не намеренное использование преобразования - оно просто не сработает. Комментарии явно игнорируются, поскольку они, в конце концов, являются комментариями и, следовательно, не являются частью XML-данных, что касается анализатора. Они просто останутся одни. –  dodexahedron 09.08.2014 в 15:16
  • Голосовать за включение этой функции в Visual Studio –  Tim Partridge 23.10.2015 в 15:29

4 ответа

27

Вместо преобразования строки или использования «Удалить» и «Вставить» очистить раздел попробуйте использовать «Заменить».

Например:

<connectionStrings xdt:Transform="Replace">

    <add name="myDb"
         connectionString="Data Source={SERVER};Initial Catalog=ManEx;User Id={USER};Password={PASSWORD};"
         providerName="System.Data.SqlClient" />

</connectionStrings>

Вы можете настроить этот раздел именно так, как вы хотите, даже если это означает, что вы добавляете новые комментарии.

    
ответ дан user2639740 10.12.2014 в 17:14
  • Посмотрите на это! Это именно то, что мне нужно. –  davids 10.12.2014 в 17:28
  • Имейте в виду, что это решение решает проблему, но делает это, заменив полную строку соединения в файле конфигурации. Любая другая строка соединения будет потеряна. –  Maarten 14.03.2016 в 10:53
3

Что я сделал на основе этого ответа :

  • Удалена существующая часть connectStrings в Web.config , которая содержит закомментированные строки подключения, используемые во время отладки;
  • Добавил раздел connectionStrings с правильной строкой соединения, которая будет использоваться при развертывании приложения.

Итак, в вашем файле преобразования Web.config у вас есть что-то вроде этого:

<!-- Removes the existing connectionStrings section which contains internal connection strings used for debugging -->
<connectionStrings xdt:Transform="Remove">    
</connectionStrings>

<!-- Re-adding the existing connectionStrings section -->
<connectionStrings xdt:Transform="Insert">

<add name="MyConnectionStringName" connectionString="Data Source=CLUSTERSQL;Initial Catalog=MyDatabase;Integrated Security=True;multipleactiveresultsets=True" providerName="System.Data.SqlClient"  xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>

</connectionStrings>
    
ответ дан Leniel Macaferi 10.12.2014 в 16:11
  • Я не думал об удалении всего раздела. Эта часть работает, но вставка не работает. Раздел не добавляется обратно. –  davids 10.12.2014 в 17:05
  • Ничего, он добавляется, только на дно, где его никто не будет искать. Это вызовет у моих пользователей больше проблем. –  davids 10.12.2014 в 17:06
  • @davids: Точно. Он добавляется, но внизу. Я больше не смотрел, как держать его в нужном месте ... в моем случае это не изменит ситуацию. Важно то, что он есть. :) –  Leniel Macaferi 10.12.2014 в 17:13
  • xdt: Transform = «Заменить» лучше, чем Удалить и Вставить в этом случае. –  kipusoep 29.03.2018 в 13:29
1

В Visual Studio 2013 вы можете иметь несколько файлов Web.config.

Кроме того, при создании нового проекта VS создает 2 для вас: Web.Debug.config и Web.Release.config. Таким образом, у вас может быть другой Web.Config для вашего проекта отладки и для вашего проекта выпуска

    
ответ дан Deblaton Jean-Philippe 09.08.2014 в 15:11
  • Я попытался использовать конфигурацию Debug для хранения строк комментариев, связанных с комментариями, но когда я запускаю его в отладке, он ничего не использует из файла Debug. –  davids 10.08.2014 в 08:48
  • @davids, это правильно. Для веб-проектов Visual Studio использует основной web.config и не применяет преобразования. Однако, если вы используете Visual Studio для развертывания / публикации или создания пакета вашего проекта, тогда применяются преобразования. Тем не менее, это не помогает для отладки [F5]. –  Zarepheth 04.02.2015 в 19:13
0

Если вам нужно добавить / вставить / установить атрибуты внутри замененной строки подключения (например, если вы используете развертывания), вы можете вложить преобразования, чтобы удалить комментарии и заменить атрибуты:

<connectionStrings xdt:Transform="Replace">
    <add name="connectionDatabase" 
         connectionString="#{ConnectionString}" 
         xdt:Transform="SetAttributes"
         xdt:Locator="Match(name)" />
</connectionStrings>
    
ответ дан Psyonity 14.03.2016 в 10:51