2008-12-18 5 views
29

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

Я нашел этот вопрос здесь: app.config configSections custom settings can not find schema information, но я не понимаю, относится ли оно к моей проблеме или нет, и как использовать ответ там, если это так.

Я также нашел эту страницу How to get Intellisense for Web.config and App.config in 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 выпадающего списка, а также соответствующие ему атрибуты.

ответ

21

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

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

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

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

DotNetConfig.xsd файл может быть найден в Visual Studio 8 (или 9) директории установки в подкаталоге Xml \ SCHEMAS.

+1

+1. Схемы часто упускаются из виду, когда речь заходит о настраиваемых разделах конфигурации. Они невероятно полезны, когда администратор или совместное использование должно внести изменения в ваш app.config или web.config. –

+2

У меня есть лучшее решение. Может потребоваться VS 2010, не уверен :) http://stackoverflow.com/questions/1127315/how-do-i-make-an-extension-xsd-for-the-web-app-config-schema/7977168#7977168 –

+3

есть все равно, чтобы сгенерировать «YOUR_DIRECTORY \ namespace.assemblyname.xsd»? Или мне просто нужно написать его вручную? – NSjonas

4

Если вы не хотите изменять свой 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 пространства имен, а вторая строка - это расположение схемы.

+1

Привет, я знаю, что это год назад. Я пробовал это, но получаю 'Unrecognized attribute 'xmlns: xsi'. Обратите внимание, что имена атрибутов чувствительны к регистру. «Когда я запускаю свое приложение. Мое приложение запускается, если я удаляю указанные вами атрибуты, но потом я теряю Intellisense. Вы знаете, почему это вызывает ошибку времени выполнения? Заранее спасибо –