Есть ли способ предотвратить потерю комментариев в моем файле web.config, если я использую редактор настроек Visual Studio? - PullRequest
1 голос
/ 10 ноября 2011

Я использую редактор настроек в Visual Studio 2010 для добавления / редактирования / удаления моих настроек из раздела моего файла .NET 4 web.config.

Вот (довольно расплывчато) пример выдержки для иллюстрации того, что я имею в виду:

  <applicationSettings>
    <Animals.My.MySettings>
      <!-- Specify the type of animal this website is dedicated to... -->
      <setting name="AnimalType" serializeAs="String">
        <value>Monkey</value>
      </setting>
    </Animals.My.MySettings>
  </applicationSettings>

В приведенном выше примере комментарий полезен для всех, кто вручную редактирует файл конфигурации на месте (например, после того, как веб-приложение было развернуто на сайте клиента). Однако, если я использую редактор настроек VS, комментарий теряется всякий раз, когда я добавляю / редактирую / удаляю настройку.

До сих пор я придумал следующие обходные пути:

  1. Я мог бы выбрать никогда использовать редактор настроек VS, но я должен был бы сказать своей команде, чтобы избежать этого, и всегда есть один раз, когда кто-то забывает, и мы теряем все наши комментарии ...

  2. Я мог бы сохранить отдельную копию файла web.config с кучей комментариев. Затем мы отправляем приложение с копией файла конфигурации ... (Мне не нравится эта идея, потому что это означает, что я должен помнить, чтобы поддерживать вторую копию в актуальном состоянии и Я должен помнить, чтобы переключать файлы конфигурации при выпуске ... Слишком много, чтобы помнить, слишком много может пойти не так).

  3. Добавление комментариев над открывающим тегом выглядит нормально, поэтому я мог бы просто разместить все свои комментарии вверху.

У меня вопрос: как лучше обойти эту проблему? Что вы рекомендуете?

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Варианты 1 и 2 страдают от одной и той же проблемы: командная дисциплина. 1 означает, что они не могут использовать редактор студии, а 2 означает, что они должны помнить, чтобы синхронизировать конфигурацию "comment".

Лично я думаю, что первое легче применить, и если вы используете контроль версий, то совершенно очевидно, кто является нарушителями.

1 голос
/ 10 ноября 2011

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

По сути, это дает вам единственное место для редактирования вашей конфигурации для всех ваших сред с использованием токенизированных заполнителей и файла настроек со строкой для каждой среды развертывания или машины разработчика. Вы можете включать / исключать комментарии на машине для каждой машины или используя логическое условие.

Кроме того, взгляните на пример использования, который я опубликовал в этом ответе ...

Как выбрать разные app.config для нескольких конфигураций сборки

0 голосов
/ 19 августа 2015

Мой обходной путь - вот часть .config файла с комментариями:

<setting name="Database" serializeAs="String">
<value>DBNAME</value>
</setting>
<setting name="ProgramPath" serializeAs="String">
<value>C:\Program Files (x86)\Vendor\Program V 11.1\prog.exe:: the P21 client -  KEEP SPACE in a comment will not remove spaces from the value</value>
</setting>
<setting name="Directory" serializeAs="String">
<value>\\Server\Share\Subdir :: where the files will be created</value>
</setting>
<setting name="FileIDs" serializeAs="String">
<value>DoThis, ThenThis :: DoThis or ThenThis or both comma separated - anything after two colons is a comment and is ignored</value>
</setting>

Эта функция VB.NET удаляет комментарии и по умолчанию удаляет встроенные пробелы

Function Run(S As String) As String
    Dim L As Integer = InStr(S, "::")
    If L = 0 Then
        Return S.Replace(Space(1), String.Empty)
    Else
        If InStr(S, "KEEP SPACE") = 0 Then
            Return S.Substring(0, L - 1).Replace(Space(1), String.Empty)
        Else
            Return S.Substring(0, L - 1)
        End If
    End If
End Function

...