2008-12-18 12 views
29

Tenemos una sección personalizada en mi archivo app.config relacionado con nuestra clase de contenedor IoC. ¿Cómo puedo obtener intellisense cuando edito el archivo de configuración para esta sección, así como deshacerme de los mensajes del compilador que me informan del esquema que falta?¿Cómo consigo intellisense en app.config para una sección personalizada?

He encontrado esta pregunta aquí: app.config configSections custom settings can not find schema information, pero no entiendo si se aplica a mi problema o no, y cómo usar la respuesta allí si lo hace.

También encontré esta página How to get Intellisense for Web.config and App.config in Visual Studio .NET, pero dice eliminar el atributo xmlns antes de ejecutar la aplicación. ¿Es esa la única/la mejor manera?

Aquí es un ejemplo de un simple archivo:

<?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> 

Básicamente me gustaría ser capaz de escribir <R dentro del nodo <ServiceContainers>, y obtener registro sugirió a mí en el menú desplegable de IntelliSense, así como la atributos apropiados para ello.

Respuesta

21

XML Intellisense no funcionará automáticamente para una sección de configuración personalizada.

Visual Studio puede informar las advertencias en la compilación quejándose de que los atributos de la sección de configuración personalizada no están definidos. Estas advertencias pueden ser ignoradas.

Si desea la compatibilidad con XML IntelliSense para una sección de configuración personalizada (o si simplemente desea que desaparezcan las advertencias 'esquema no encontrado'), agregue la siguiente línea a su archivo DotNetConfig.xsd inmediatamente después del primer < xs: esquema ... > línea (que suele ser la segunda línea en el archivo DotNetConfig.xsd).

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

El archivo DotNetConfig.xsd se pueden encontrar en el Visual Studio 8 (o 9) guía de instalación en el subdirectorio xml \ esquemas.

+1

+1. Los esquemas a menudo se pasan por alto cuando se trata de secciones de configuración personalizadas. Son increíblemente útiles para cuando admin o co-lo tiene que hacer cambios a su app.config o web.config. –

+2

Tengo una mejor solución. Puede requerir VS 2010, no estoy seguro :) http://stackoverflow.com/questions/1127315/how-do-i-make-an-extension-xsd-for-the-web-app-config-schema/7977168#7977168 –

+3

está de todos modos para generar el "YOUR_DIRECTORY \ namespace.assemblyname.xsd"? ¿O solo tengo que escribirlo manualmente? – NSjonas

4

Si no desea modificar su DotNetConfig.xsd, puede agregar la configuración de xsd "en línea".

En su caso añadir los siguientes atributos a la sección de Uso

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

     <Registration .... 

</ServiceContainers> 

Esto es útil para comprobar un xsd localmente debido location_of_your_schema podría ser una ruta local y cuando esté listo para el cambio de producción location_of_your_schema a la url pública del archivo xsd.

Nota que el xsi: schemaLocation atributo debe contener pares de cadenas separadas por espacios donde la primera cadena en cada par es un espacio de nombres URI y la segunda cadena es la ubicación de un esquema.

+1

Hola, sé que esto es hace un año. Intenté esto pero obtengo el atributo 'No Reconocido 'xmlns: xsi'. Tenga en cuenta que los nombres de los atributos distinguen entre mayúsculas y minúsculas cuando ejecuto mi aplicación. Mi aplicación se ejecuta si elimino los atributos que mencionaste, pero luego pierdo Intellisense. ¿Sabrías por qué causa un error de tiempo de ejecución? Gracias por adelantado –

Cuestiones relacionadas