c# - getsection - Error al obtener la configuración para Common.Logging de la sección de configuración ''common/logging''
get web config value c# (8)
¿Puedes probar con Common.Logging.dll versión 2.1.1.0 en su lugar.
Puede descargar y comparar la fuente de las dos versiones usted mismo, pero hasta donde puedo ver, la única diferencia entre 2.1.0.0 y 2.1.1.0 es un cambio relacionado con la lectura de la configuración para solucionar un error de Framework 4.0. La descripción del error (ver http://support.microsoft.com/kb/2580188 ) se refiere a la ejecución desde un recurso compartido de red que no estoy ejecutando desde una red, sin embargo, una aplicación de prueba que utiliza 2.1.0.0 genera el mismo error que estás recibiendo mientras que 2.1.1.0 no lo hace.
Si está usando otra biblioteca que espera la versión 2.1.0.0 de common.logging.dll, entonces debería poder usar un redireccionamiento de ensamblajes para usar 2.1.1.0 en su lugar.
PD
No estoy seguro de si es relevante, pero dejé el nombre de la dll como Common.Logging.Log4Net121.dll y modifiqué el app.config en su lugar
Estoy tratando de configurar una aplicación de consola con los siguientes ensamblajes de registro:
- Common.Logging.dll (2.1.0.0)
- Common.Logging.Log4Net1211.dll (2.1.0.0)
- log4net.dll (1.2.11.0)
Si el registrador se configura programáticamente, entonces todo funciona bien:
NameValueCollection properties = new NameValueCollection(); properties["showDateTime"] = "true";
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter(properties);
Pero si trato de iniciarlo usando el siguiente archivo de configuración, explota:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>
</configSections>
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
<arg key="configType" value="FILE-WATCH"/>
<arg key="configFile" value="~/Log4NET.xml"/>
</factoryAdapter>
</logging>
</common>
</configuration>
Estos son los mensajes de error relevantes:
{"Unable to cast object of type ''System.Configuration.DefaultSection'' to type ''System.Configuration.AppSettingsSection''."}
{"Failed obtaining configuration for Common.Logging from configuration section ''common/logging''."}
Parece que no se puede analizar mi archivo de configuración, ¿alguien sabe cuál debe ser el formato correcto o es otra cosa que está mal? Creé mi archivo de configuración utilizando la documentación oficial .
Aunque esta es una pregunta antigua, tuve este problema unas semanas y ninguna de las respuestas actuales pareció remediarlo. Parecía que mi configuración era correcta, ya que tenía muchas otras aplicaciones que usaban una configuración casi idéntica sin ningún problema. Después de un poco de depuración y ejecución a través de stacktraces, finalmente encontré el problema.
Tenga en cuenta que en IIS tengo la aplicación API alojada en otra aplicación. En este caso, tanto la aplicación CAMP como la aplicación API debajo de ella utilizan Common.Logging. Debido a esto, ambos archivos web.config
se cargan, Common.Logging lee la configuración de CAMP , luego ve que la API tiene configuración y trata de leer eso también, ve la sección Common.Logging y arroja porque ya lo ha leído desde la aplicación CAMP .
Al final, la solución fue sacar la API de debajo de la aplicación CAMP en IIS. Un caso un poco obsesivo, pero tal vez alguien más podría enfrentar este problema algún día.
Descubrí que se debía al paquete NuGet de Common.Logging.Log4Net1211 que recupera una versión anterior de Common.Logging. Verifique si hay actualizaciones de NuGet en Common.Logging y si encuentra una descarga e intente nuevamente.
Estaba teniendo este problema (o relacionado) también y después de medio día de búsqueda y depuración de errores, lo reduje a un problema de configuración.
La excepción fue la misma que la OP y la excepción interna en algunos niveles dentro de ella no pudo encontrar Common.Logging.Log4Net
( FileNotFoundException
).
Parece que para el paquete NuGet de Common.Logging.Log4Net1211, han cambiado el nombre del nombre de assembly a Common.Logging.Log4Net1211 en lugar de simplemente a Common.Logging.Log4Net . Esto significa que en su app.config
necesita referirse a este nuevo nombre de ensamblaje: <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1211">
Aquí está toda mi sección común / de registro de app.config para referencia:
<common>
<logging>
<!-- Notice that it''s Log4net1211 -->
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1211">
<arg key="configType" value="FILE-WATCH" />
<arg key="configFile" value="~/Log4Net-MAIN.config" />
</factoryAdapter>
</logging>
</common>
Estoy usando
Common.Logging v3.3.1.0
con
Common.Logging.Log4Net1213 v3.3.1.0
en ASP.NET Web API v5
, que lanza una excepción
"las secciones de configuración de los padres no están permitidas"
Se lanza una excepción desde el método Common.Logging.ConfigurationSectionHandler.Create
Para hacer este trabajo, tuve que configurar gramáticamente el adaptador.
var properties = new Common.Logging.Configuration.NameValueCollection();
properties["configType"] = "INLINE";
Common.Logging.LogManager.Adapter = new Log4NetLoggerFactoryAdapter(properties);
Todavía tengo que averiguar por qué IIS / Express llama al método Crear dos veces, lo que está causando que se lance la excepción dentro de la condición if, pero al menos la presión está desactivada por el momento.
Hay dos problemas con tu aplicación (la que descargué):
- Sus configSections en app.config se ve así:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
¿Observe que la sección log4net se declara dos veces? Retire el primero.
- Después de eliminar la primera sección log4net, obtengo lo siguiente:
No se pudo cargar el archivo o el ensamblaje ''log4net, Versión = 1.2.11.0, Cultura = neutral, PublicKeyToken = 669e0ddf0bb1aa2a'' o una de sus dependencias. La definición del manifiesto del ensamblaje ubicado no coincide con la referencia del ensamblaje. (Excepción de HRESULT: 0x80131040)
Descargué log4net 1.2.11.0 del sitio web log4net, lo descomprimí, desbloqueé el dll y reemplacé el log4net en su ejemplo y parece que funciona.
Lo tengo funcionando instalando un paquete faltante
Install-Package Common.Logging.Log4Net1211
Si su log4net es 2.0.6 o superior, puede ser conveniente usar el paquete Common.Logging.Log4Net.Universal.