2012-01-23 10 views
5

Ho creato una classe direttamente mappata a ConfigSection di web. config. La mia definizione di classe è il seguente: la sezioneCome modificare il runtime della sezione web.config?

public class myConfiguration: ConfigurationSection 
{ 
    public myConfiguration() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 

    [ConfigurationProperty("fileName", IsRequired = true)] 
    public string FileName 
    { 
     get { return this["fileName"] as string; } 
    } 


    [ConfigurationProperty("rootNode", IsRequired = true)] 
    public string RootNode 
    { 
     get { return this["rootNode"] as string; } 
    } 

    [ConfigurationProperty("childNode", IsRequired = true)] 
    public string ChildNode 
    { 
     get { return this["childNode"] as string; } 
    } 

    [ConfigurationProperty("comparableAttributes", IsRequired = true)] 
    public string ComparableAttributes 
    { 
     get 
     { return this["comparableAttributes"] as string; } 
    } 
} 

ho creato nel file web.config, come di seguito:

<configSections> 
    <section name="myConfigDemo" type="myConfiguration"/> 
    </configSections> 

Poi ho usato questa sezione come

<myConfigDemo fileName="myXml.xml" rootNode="world" childNode="country" comparableAttributes="id, population"> 

    </myConfigDemo> 

Ora il problema è Come posso assegnare fileName = "anotherFile.xml" in fase di esecuzione? Ho provato

[ConfigurationProperty("fileName", IsRequired = true)] 
    public string FileName 
    { 
     get { return this["fileName"] as string; } 
     set { 
      string str = this["fileName"] as string; 
       str = value; } 
    } 

Ma il mio Visual Studio rende il mio pc hang wen uso il codice sopra! So che la proprietà è in sola lettura quando si usa solo get ma set fa appendere il mio pc !!! Cosa posso fare per cambiare il nome del file runtime?

+0

http://stackoverflow.com/questions/719928/how-do-you-modify-the-web-config-appsettings-at-runtime –

+0

Due domande con lo stesso titolo entro un'ora? Dovresti modificare la tua domanda originale invece di crearne una nuova. http://stackoverflow.com/questions/8968924/how-to-modify-web-config-runtime (o modifica i titoli se differiscono fortemente) –

+0

Penso che sia su 'appSettings'! configurazione del sistema e sono desideroso della mia configurazione! Come so, puoi modificare il runtime di 'appSettings' ma come cambiare la mia configurazione che non conosco! A proposito, grazie per il suggerimento! – Chintan

risposta

2

Esistono classi .net progettate per un accesso più accurato a quasi tutto ciò che è possibile trovare nei file .config (e non solo in appSettings o ConnectionStrings); documentazione qui: http://msdn.microsoft.com/en-us/library/x1et32w6.aspx

Non sono sicuro che forniscano modi per modificare i valori, tuttavia (date un'occhiata). Tuttavia, un gotcha: i file di configurazione sono progettati per configurare l'app all'avvio; in altre parole, l'app legge il file quando viene avviato, e poi di nuovo se viene modificato manualmente o tramite un processo. Con le app di asp.net, ciò significa che l'applicazione si riavvierà automaticamente (per impostazione predefinita, l'impostazione di IIS).

Se si desidera riconfigurare l'app in fase di esecuzione, è necessario forzare il riavvio ogni volta che si salva il file. Quindi, in tal caso, scrivi il codice per apportare tutte le modifiche in memoria (ad esempio utilizzando le classi xml), quindi salva tutto in una volta.

C'è un'impostazione all'interno di app-pool per disabilitare il riavvio automatico sulle modifiche di configurazione; tuttavia, se lo fai, l'app NON si riavvierà quando apporti le modifiche di configurazione, e dovrai scrivere il codice per riavviarlo affinché riprenda le modifiche.

Questa classe potrebbe essere tuo amico, se si vuole serializzare automaticamente la classe di configurazione personalizzata per elemento XML: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

Mi auguro che aiuta.

Problemi correlati