2009-08-14 15 views
5

tengo un archivo app.config, que contiene la siguiente.NET ConfigurationManager app.config confusión

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name ="PowershellSnapIns" type ="System.Configuration.DictionarySectionHandler,System"/> 
    </configSections> 

    <PowershellSnapIns> 
     <add key="SnapIn1" value="WebAdministration" /> 
     <add key="SnapIn2" value="Jimmy Hendrix" /> 
     <add key="SnapIn3" value="..." /> 
    </PowershellSnapIns> 
</configuration> 

que iba a utilizar la clase ConfigurationSettings a leerlo, pero que ya no se utiliza. Eso fue bastante simple de usar. Ahora tengo que usar la clase ConfigurationManager, y ahora tengo este código para leerlo.

System.Configuration.Configuration config = 
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

IDictionary SnapInList = (IDictionary) config.GetSection("PowershellSnapIns"); 

Pero sigue saliendo el error. Cambié las propiedades de app.config para copiar en la compilación, pero sigue aceptando que no puede encontrar el archivo. La excepción dice que está buscando TestConsole.vshost.exe.config. ¿El vs2k8sp1 ahora cambia el nombre de la aplicación.config automáticamente, y si es así, qué estoy haciendo mal? Seguramente no necesito cambiar el nombre del archivo app.config para depurar vhost. Sé en el lanzamiento que probablemente se renombró TestConsole.exe.config. Entonces, ¿qué está mal? ¿Es el caso del código incorrecto o qué?

+2

.NET no "error". Arroja excepciones. Cuando una excepción no se detecta y hace que su programa "no funcione", debe publicar la excepción completa en su pregunta. Captura la excepción y luego publica los resultados de 'ex.ToString()'. –

+0

va a hacer. Traté de cambiar el nombre del archivo a TestConsole.vhost.exe.config pero volvió vacío. –

+0

Hola John, Esta es la excepción. Ha ocurrido un error al crear el manejador de sección de configuración para PowershellSnapI ns: No se pudo cargar el archivo o ensamblado 'Sistema' o una de sus dependencias. El sistema sys tem no puede encontrar el archivo especificado. (C: \ Users \ Administrator \ Documents \ Visual Stu dio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug \ TestConsole.vshost.exe.confi g línea 4) –

Respuesta

12

Así es como lo hice:

-Asegúrese de que System y System.Configuration.dll están disponibles en el directorio bin. Para ello, agregue la referencia a ambos dlls y establezca su atributo copy local en true.

-Asegúrese en su archivo App.Config, establezca los atributos copy local en false.

-Utilizar el siguiente método:

public static string XMLCheck 
{ 
    get 
    { 
     var section =(Hashtable)ConfigurationManager.GetSection("PowershellSnapIns"); 
     return (string)section["SnapIn1"]; 

    } 
} 

-La XMLCheck deberían volver "WebAdministration"

+0

La clave no importa, ya que no necesito conocer la clave, solo el valor, que es el nombre de complemento de Powershell. –

+0

Respuesta actualizada. – Graviton

+0

Hola Ngu Soon Hui, Funcionó. Gracias. Puedo ver ahora (la retrospectiva es hermosa) que la clase ConfigurationManager es estática. Gracias. –

1

VS cambia el nombre del app.config a yourappname.exe y lo coloca en el directorio bin junto con su. exe

Puede confirmar que el archivo existe en el directorio bin junto con su exe.

+1

El archivo TestConsole.vhost.exe.config se encuentra en el directorio Visual Studio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug. –

Cuestiones relacionadas