无法获得用于从设定单元“共同/记录” Common.Logging配置(Failed obtaini

2019-07-30 07:02发布

我想配置与以下日志记录组件控制台应用程序:

  • Common.Logging.dll(2.1.0.0)
  • Common.Logging.Log4Net1211.dll(2.1.0.0)
  • log4net.dll(1.2.11.0)

如果记录器被编程配置,然后一切工作正常:

NameValueCollection properties = new NameValueCollection(); properties["showDateTime"] = "true";    
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter(properties);

但是,如果我尝试使用下面的配置文件来启动它,它炸毁:

<?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>

这些都是相关的错误信息:

{"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'."}

这似乎是无法解析我的配置文件,没有人知道正确的格式应该是什么,或者是别的东西这是错误的? 我用我的创建配置文件的官方文档 。

Answer 1:

有两个问题与您的应用程序(我下载了一个):

  1. 你在的app.config configSections看起来是这样的:
<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>

请注意,log4net的截面声明两次? 删除第一个。

  1. 除去第一log4net的截面后,我得到如下:

无法加载文件或程序集“log4net的,版本= 1.2.11.0文化=中性公钥= 669e0ddf0bb1aa2a”或它的一个依赖。 在位于集清单定义不匹配的程序集引用。 (从HRESULT异常:0x80131040)

我下载log4net的1.2.11.0从log4net的网站上,解压缩它,畅通的DLL和你的榜样替代log4net的,它似乎工作。



Answer 2:

我是有这个(或相关)问题,以及和错误狩猎和调试半天后,我把范围缩小到配置问题。

唯一的例外是一样的OP和内部异常的这里面的几个水平没有找到Common.Logging.Log4NetFileNotFoundException )。

看来,对于Common.Logging.Log4Net1211 NuGet包,他们已经更名为Common.Logging.Log4Net1211而不是简单地Common.Logging.Log4Net的的AssemblyName。 这意味着在你app.config ,你需要参考这一新的程序集名称: <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1211">

这里是我的整个通用/记录的app.config为参考的部分:

<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>


Answer 3:

我正在使用

Common.Logging v3.3.1.0

Common.Logging.Log4Net1213 v3.3.1.0

ASP.NET Web API v5 ,它抛出异常

“亲本配置部分不允许”

异常是从抛出Common.Logging.ConfigurationSectionHandler.Create方法

为了使这项工作,我不得不语法配置适配器

var properties = new Common.Logging.Configuration.NameValueCollection();
properties["configType"] = "INLINE";
Common.Logging.LogManager.Adapter = new Log4NetLoggerFactoryAdapter(properties);

我仍然要弄清楚为什么IIS / Express将调用Create方法的两倍,这是造成例外,如果条件内被抛出,但至少压力关闭了。



Answer 4:

我把它通过安装缺失的软件包工作

Install-Package Common.Logging.Log4Net1211


Answer 5:

你可以尝试用Common.Logging.dll 2.1.1.0版本代替。

您可以下载和自己比较两个版本的来源,但据我可以看到2.1.0.0和2.1.1.0之间的唯一区别是与为了要解决一个框架4.0的错误读取配置设置的变化。 错误的(参见说明书http://support.microsoft.com/kb/2580188 )是指从其中我不是从网络上运行的网络共享运行,尚未使用2.1.0.0测试的应用程序产生的相同的错误你得到,而2.1.1.0没有。

如果您使用的是预计common.logging.dll的2.1.0.0版本的另一库,那么你应该能够使用汇编重定向时使用2.1.1.0来代替。

PS

不知道是否是相关的,但我离开的DLL作为Common.Logging.Log4Net121.dll的名称和修改的app.config代替



Answer 6:

我发现,这是由于Common.Logging.Log4Net1211 NuGet包retrieveing Common.Logging的旧版本。 检查的NuGet更新Common.Logging,如果你找到一个下载它,然后再试一次。



Answer 7:

尽管这是一个老问题,我有这个问题了几个星期,没有电流答案似乎补救。 似乎我的配置是正确的,因为我使用了几乎相同的配置没有问题,许多其他应用程序。 相当多的调试,并通过踪迹运行后,我终于找到了问题。

请注意,在IIS中,我下另一个应用程序托管的API应用程序。 在这种情况下,两个阵营的应用和它下面的API应用程序正在使用Common.Logging两者。 正因为如此,双方web.config文件获取加载,Common.Logging读取阵营的配置,那么它看到API具有配置和试图读取为好,看到Common.Logging部分,并抛出了,因为它已经读到从营地中的应用。

到底的解决方案是从IIS中的CAMP应用下移出的API。 一个obsucre边缘情况的位,但也许其他人可能面对这样的问题,有一天。



Answer 8:

如果你的log4net的是2.0.6或以上,可以方便使用Common.Logging.Log4Net.Universal包。



文章来源: Failed obtaining configuration for Common.Logging from configuration section 'common/logging'