23

次のログ アセンブリを使用してコンソール アプリケーションを構成しようとしています。

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

構成ファイルを解析できないようですが、正しい形式が何であるかを知っている人はいますか、それとも何か他の問題がありますか? 公式ドキュメントを使用して構成ファイルを作成しました。

4

8 に答える 8

24

私もこの(または関連する)問題を抱えていました.半日のエラーハンティングとデバッグの後、構成の問題に絞り込みました.

例外はOPと同じで、その内部の数レベルの内部例外が見つかりませんでしたCommon.Logging.Log4NetFileNotFoundException)。

Common.Logging.Log4Net1211 NuGet パッケージの場合、単にCommon.Logging.Log4Netではなく、アセンブリ名をCommon.Logging.Log4Net1211に変更したようです。これは、この新しいアセンブリ名を参照する必要があることを 意味します。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>
于 2012-08-22T11:03:11.653 に答える
14

アプリケーション (私がダウンロードしたもの) には 2 つの問題があります。

  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-section が 2 回宣言されていることに注意してください。最初のものを削除します。

  1. 最初の log4net-section を削除すると、次のようになります。

ファイルまたはアセンブリ 'log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)

log4net Web サイトから log4net 1.2.11.0 をダウンロードして解凍し、dll のブロックを解除して、例の log4net を置き換えたところ、動作しているようです。

于 2012-07-25T12:50:40.177 に答える
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 メソッドを 2 回呼び出し、if 条件内で例外がスローされる原因を突き止める必要がありますが、少なくとも今のところ圧力はかかりません。

于 2016-09-20T16:00:10.437 に答える
2

不足しているパッケージをインストールすることで機能しました

Install-Package Common.Logging.Log4Net1211
于 2014-10-01T10:42:35.727 に答える
2

これは古い質問ですが、私はこの問題を数週間抱えていましたが、現在の回答のどれもそれを解決していないようです. ほぼ同一の構成を問題なく使用している他の多くのアプリケーションがあったため、私の構成は正しいようでした。スタックトレースをかなりデバッグして実行した後、ようやく問題が見つかりました。

IIS

IIS では、API アプリケーションを別のアプリケーションでホストしていることに注意してください。この場合、CAMPアプリケーションとその下のAPIアプリケーションの両方が Common.Logging を使用しています。このため、両方のweb.configファイルがロードされ、 Common.Logging がCAMPの構成を読み取り、次にAPIに構成があることがわかり、それも読み取ろうとし、 Common.Logging セクションを見て、CAMPから既に読み取っているためスローします。応用。

最終的な解決策は、IISのCAMPアプリケーションの下からAPIを移動することでした。少しあいまいなエッジケースですが、おそらく他の誰かがいつかこの問題に直面するかもしれません.

于 2018-06-06T13:08:00.427 に答える
1

代わりに、Common.Logging.dll バージョン 2.1.1.0 を試すことができますか。

2 つのバージョンのソースを自分でダウンロードして比較することができますが、私の知る限り、2.1.0.0 と 2.1.1.0 の唯一の違いは、Framework 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 を変更しました。

于 2012-07-19T16:26:58.157 に答える
1

Common.Logging.Log4Net1211 NuGet パッケージが古いバージョンの Common.Logging を取得したことが原因であることがわかりました。Common.Logging に対する NuGet の更新を確認し、見つかった場合はダウンロードして再試行してください。

于 2013-01-31T17:07:50.803 に答える