2012-01-23 26 views
5

He creado una clase que se asigna directamente al ConfigSection de la web. config. Mi definición de clase se da a continuación: SecciónCómo modificar el tiempo de ejecución de la sección 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; } 
    } 
} 

he creado en el archivo web.config de la siguiente manera:

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

entonces he utilizado esta sección como

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

    </myConfigDemo> 

Ahora el problema ¿Cómo puedo asignar fileName = "anotherFile.xml" en tiempo de ejecución? Lo intenté

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

¡Pero mi Visual Studio hace que mi PC cuelgue cuando uso el código anterior! ¡Sé que la propiedad es de solo lectura cuando usas solo get pero set hace que mi PC se cuelgue! ¿Qué puedo hacer para cambiar el tiempo de ejecución del nombre de archivo?

+0

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

+0

¿Dos preguntas con el mismo título en una hora? Debe editar su pregunta original en lugar de crear una nueva. http://stackoverflow.com/questions/8968924/how-to-modify-web-config-runtime (o modifique los títulos si difieren mucho) –

+0

¡Creo que se trata de 'appSettings'! configuración del sistema y estoy ansioso por mi propia configuración! Como sé, puedes modificar el tiempo de ejecución de 'appSettings', pero ¡cómo cambiar mi propia configuración que no sé! Por cierto, gracias por su sugerencia! – Chintan

Respuesta

2

Existen clases .net diseñadas para un acceso más preciso a casi todo lo que se puede encontrar en los archivos .config (y no solo en los elementos appSettings o ConnectionStrings); documentación aquí: http://msdn.microsoft.com/en-us/library/x1et32w6.aspx

No estoy seguro de si proporcionan formas de cambiar los valores, sin embargo (échele un vistazo). Sin embargo, los archivos gotcha: config están diseñados para configurar la aplicación al inicio; en otras palabras, la aplicación lee el archivo cuando se inicia y luego nuevamente si se lo cambia manualmente o mediante un proceso. Con las aplicaciones asp.net, esto significa que la aplicación se reiniciará automáticamente (por defecto, configuración de IIS).

Si realmente desea reconfigurar la aplicación en tiempo de ejecución, la obligará a reiniciarse cada vez que guarde el archivo. Entonces, en ese caso, escriba el código para hacer todos los cambios en la memoria (por ejemplo, usando clases xml), luego guarde todo de una vez.

Hay una configuración dentro del grupo de aplicaciones para deshabilitar el reinicio automático en los cambios de configuración; sin embargo, si hace esto, la aplicación NO se reiniciará cuando realice los cambios de configuración, y deberá escribir el código para reiniciarlo y recoger los cambios.

Esta clase podría ser su amigo, si desea realizar una serie automáticamente su clase de configuración personalizada para el elemento xml: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

Espero que ayude.

Cuestiones relacionadas