Как получить intellisense в app.config для настраиваемого раздела?

У нас есть специальный раздел в моем файле app.config, связанный с нашим контейнерным классом IoC. Как я могу получить intellisense при редактировании файла конфигурации для этого раздела, а также избавиться от сообщений компилятора, информирующих меня об отсутствующей схеме.

Я нашел здесь этот вопрос: пользовательские настройки app.config configSections не могут найти информацию о схеме, но я не понимаю, применимо ли это к моей проблеме или нет, и как использовать там ответ, если это так.

Я также нашел эту страницу Как получить Intellisense для Web.config и App.config в Visual Studio .NET, но требует удалить атрибут xmlns перед запуском приложения. Это действительно единственный / лучший способ?

Вот пример простого файла:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="ServiceContainers"
        type="LVK.IoC.RegistrationsSectionHandler, LVK"/>
  </configSections>
  <ServiceContainers>
    <Registration type="DatabaseConnection" class="DatabaseConnection">
      <Parameter name="connectionString" type="System.String"
          value="TYPE=MSSQL2000;SERVER=localhost;DATABASE=db"/>
    </Registration>
  </ServiceContainers>
</configuration>

В основном я хотел бы иметь возможность набрать <R внутри узла <ServiceContainers> и получить предложенную мне регистрацию в раскрывающемся списке intellisense, а также соответствующие атрибуты для нее.


person Lasse V. Karlsen    schedule 18.12.2008    source источник


Ответы (2)


XML Intellisense не будет автоматически работать для настраиваемого раздела конфигурации.

Visual Studio может сообщать о предупреждениях при компиляции с жалобами на то, что атрибуты раздела настраиваемой конфигурации не определены. Эти предупреждения можно игнорировать.

Если вам нужна поддержка XML IntelliSense для настраиваемого раздела конфигурации (или если вы просто хотите, чтобы предупреждения «схема не найдена» исчезли), добавьте следующую строку в файл DotNetConfig.xsd сразу после первого ‹xs: schema ...› строка (которая обычно является второй строкой в ​​файле DotNetConfig.xsd).

<xs:include schemaLocation="YOUR_DIRECTORY\namespace.assemblyname.xsd"/>

Файл DotNetConfig.xsd можно найти в каталоге установки Visual Studio 8 (или 9) в подкаталоге Xml \ Schemas.

person Steven A. Lowe    schedule 18.12.2008
comment
+1. Когда дело доходит до настраиваемых разделов конфигурации, схемы часто упускаются из виду. Они невероятно полезны, когда администратор или коллега должен внести изменения в ваш app.config или web.config. - person Joseph Ferris; 19.12.2008
comment
У меня есть решение получше. Может потребоваться VS 2010, не уверен :) stackoverflow.com/questions/1127315/ - person Merlyn Morgan-Graham; 02.11.2011
comment
есть ли способ сгенерировать ВАШ_КАТАЛОГ \ namespace.assemblyname.xsd? Или надо просто вручную писать? - person NSjonas; 14.02.2013
comment
Редактировать индивидуальные настройки машины разработчика для функции, которая должна существовать, безумие. Уже существует инструмент для создания документов XSD из настраиваемого типа раздела конфигурации (ookii.org/Software/ConfigurationDocumentationGenerator), и согласно этому ответу: stackoverflow.com/a/7681132/88409, вы можете просто включить XSD в своем решении, затем отметьте элемент раздела соответствующим атрибутом xmlns. - person Triynko; 15.09.2015
comment
@Triynko: Согласен, это безумие. Обратите внимание, что это ответ 2008 года. Я надеюсь, что теперь есть лучшее решение :) - person Steven A. Lowe; 16.09.2015

Если вы не хотите изменять свой DotNetConfig.xsd, вы можете добавить конфигурацию xsd «inline».

В вашем случае добавьте следующие атрибуты в настраиваемый раздел

<ServiceContainers xmlns="your_xmlns"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="your_xmlns location_of_your_schema">

         <Registration ....

</ServiceContainers>

Это полезно при локальном тестировании xsd, поскольку location_of_your_schema может быть локальным путем, и когда вы будете готовы к производству, измените location_of_your_schema на общедоступный URL-адрес файла xsd.

Обратите внимание, что атрибут xsi: schemaLocation должен содержать пары строк, разделенных пробелами, где первая строка в каждой паре - это URI пространства имен, а вторая строка - расположение схемы.

person Juan M. Elosegui    schedule 10.09.2014
comment
Привет, я знаю, что это год назад. Я пробовал это, но при запуске приложения получаю Unrecognized attribute 'xmlns:xsi'. Note that attribute names are case-sensitive.. Мое приложение запускается, если я удалю упомянутые вами атрибуты, но тогда я потеряю Intellisense. Знаете ли вы, почему это вызывает ошибку времени выполнения? Заранее спасибо - person Frank Fajardo; 28.09.2015