2008-12-18 13 views
29

Abbiamo una sezione personalizzata nel mio file app.config correlata alla nostra classe contenitore IoC. Come posso ottenere intellisense durante la modifica del file di configurazione per questa sezione, oltre a eliminare i messaggi del compilatore che mi informano dello schema mancante.Come ottengo intellisense in app.config per una sezione personalizzata?

Ho trovato questa domanda qui: app.config configSections custom settings can not find schema information, ma non capisco se si applica al mio problema o no, e come usare la risposta lì se lo fa.

Ho trovato anche questa pagina How to get Intellisense for Web.config and App.config in Visual Studio .NET, ma dice di rimuovere l'attributo xmlns prima di eseguire l'applicazione. È davvero l'unico/miglior modo?

Ecco un esempio di un semplice file:

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

Fondamentalmente vorrei essere in grado di digitare <R all'interno del nodo <ServiceContainers>, e ottenere la registrazione mi ha suggerito nel menu a discesa IntelliSense, così come il attributi appropriati per questo.

risposta

21

XML Intellisense non funzionerà automaticamente per una sezione di configurazione personalizzata.

Visual Studio può segnalare avvisi sulla compilazione che lamentano che gli attributi della sezione di configurazione personalizzata non sono definiti. Questi avvertimenti possono essere ignorati.

Se si desidera il supporto XML IntelliSense per una sezione di configurazione personalizzata (o se si desidera solo che gli avvisi "schema non trovato" scompaiano), aggiungere la seguente riga al file DotNetConfig.xsd immediatamente dopo il primo < xs: schema ... linea > (che è in genere la seconda riga nel file DotNetConfig.xsd).

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

Il file DotNetConfig.xsd può essere trovato in Visual Studio 8 (o 9) directory di installazione nella sottodirectory Xml \ schemi.

+1

+1. Gli schemi sono spesso trascurati quando si tratta di sezioni di configurazione personalizzate. Sono incredibilmente utili per quando admin o co-lo deve apportare modifiche a app.config o web.config. –

+2

Ho una soluzione migliore. Potrebbe richiedere VS 2010, non sono sicuro :) http://stackoverflow.com/questions/1127315/how-do-i-make-an-extension-xsd-for-the-web-app-config-schema/7977168#7977168 –

+3

ci sono comunque per generare "YOUR_DIRECTORY \ namespace.assemblyname.xsd"? O devo solo scriverlo manualmente? – NSjonas

4

Se non si desidera modificare DotNetConfig.xsd, è possibile aggiungere la configurazione xsd "in linea".

Nel tuo caso aggiungere i seguenti attributi alla sezione personalizzata

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

     <Registration .... 

</ServiceContainers> 

Questo è utile durante la prova di un XSD a livello locale, perché location_of_your_schema potrebbe essere un percorso locale e quando si è pronti a cambiare la produzione location_of_your_schema all'URL pubblico del file xsd.

noti che il xsi: schemaLocation attributo deve contenere coppie di stringhe separate da spazi in cui la prima stringa di ciascuna coppia è un URI del namespace e la seconda stringa è la posizione di uno schema.

+1

Ciao, lo so che è un anno fa. Ho provato questo ma ottengo 'attributo non riconosciuto 'xmlns: xsi'. Nota che i nomi degli attributi fanno distinzione tra maiuscole e minuscole. Quando eseguo la mia app. La mia app viene eseguita se rimuovo gli attributi che hai menzionato, ma poi perdo Intellisense. Sapresti perché causa errori di runtime? Grazie in anticipo –

Problemi correlati