library - config file c#
CloudConfigurationManager no recoge ApplicationSettings de app.config (1)
Tengo una biblioteca que contiene algunas clases de ayuda de Azure. Dentro de estas clases de ayuda, obtengo configuraciones como el nombre y la clave de la cuenta de Azure. Cuando se ejecuta en Azure, estas configuraciones se recogen del archivo de configuración de la nube (cscfg). Todo esto funciona bien.
Para probar estas clases fuera de Azure (específicamente RoleEnvironment), creé configuraciones de los mismos nombres de variables en el proyecto de prueba de unidad. Estos realmente se guardan en un archivo app.config y se editan a través de la sección de configuración que se encuentra en la sección de propiedades de mi proyecto de prueba. En lugar de crear mi propio método para abstraer las configuraciones de configuración de la nube de las configuraciones web.config / app.config, decidí usar la clase CloudConfigurationManager. Sin embargo, cuando ejecuto las pruebas de unidad, no se selecciona ninguna de mis configuraciones, así que simplemente obtengo nulos. Sin embargo, si cambio mi archivo app.config para usar la configuración en el formato ''appSettings'' a continuación, obtengo valores válidos. La desventaja de esto es que ya no puedo editar mi configuración usando la página del editor de configuración dentro de Visual Studio.
Entonces, mi pregunta es si estoy haciendo algo mal o ¿es esto una limitación del administrador de configuración en la nube, por lo que solo puede capturar las configuraciones agregadas manualmente pero no las configuraciones agregadas usando el editor?
<appSettings>
<add key="Foo" value="MySettingValue"/>
</appSettings>
Las obras anteriores, mientras que las siguientes no:
<applicationSettings>
<ComponentsTest.Properties.Settings>
<setting name="Foo" serializeAs="String">
<value>MySettingValue</value>
</setting>
</ComponentsTest.Properties.Settings>
</applicationSettings>
CloudConfigurationManager solo es compatible con la parte AppSettings de web.config / app.config e intentará leer los valores desde aquí si falta la configuración en la configuración de Azure. La documentación indica que no leerá web.config / app.config si la propiedad RoleEnvironment.IsAvailable es verdadera (se ejecuta en Azure), pero eso es incorrecto, como podemos ver en el código fuente a continuación (no hay verificación de IsAvailable) .
Puedes echar un vistazo a la source para ver qué pasa:
/// <summary>
/// Gets a setting with the given name.
/// </summary>
/// <param name="name">Setting name.</param>
/// <returns>Setting value or null if such setting does not exist.</returns>
internal string GetSetting(string name)
{
Debug.Assert(!string.IsNullOrEmpty(name));
string value = null;
value = GetValue("ServiceRuntime", name, GetServiceRuntimeSetting);
if (value == null)
{
value = GetValue("ConfigurationManager", name, n => ConfigurationManager.AppSettings[n]);
}
return value;
}
Como puede ver, solo hay una llamada a la clase ConfigurationManager normal que simplemente accede a la configuración de la aplicación .