1

「エラー 19 'LogManager' は 'Common.Logging.LogManager' と 'NLog.LogManager' の間のあいまいな参照です」というエラー メッセージが表示されます。

C# 2008 アプリケーションで、次の場所から取得した common.logging を既に使用しているアプリケーションに nlog オープン ソース ロギング ツールを追加しようとしています: http://netcommon.sourceforge.net

NLog ファイルへの参照を追加し、Nlog を using ステートメントに追加しました。

問題は、両方のツールが「LogManager」と呼ばれるオブジェクトを使用することです。

したがって、両方の Logmanager を使用できるように、問題を解決する方法を教えてください。

以下は私のコードです: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using Common.Logging;
     using sample;
     using System.Configuration;
     using System.Xml.Linq;  
     using NLog;

namespace sample
{
  public class Etest
  {
    private static Logger logger = LogManager.GetCurrentClassLogger(); 
    private static ILog log = LogManager.GetCurrentClassLogger();
  }
}
4

2 に答える 2

6

呼び出しが十分に修飾されていることを確認する必要があるだけです。

public class Etest
{
   private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); 
   private static ILog log = Common.Logging.LogManager.GetCurrentClassLogger();
}
于 2012-11-13T23:41:15.910 に答える
0

usingディレクティブを介してそれらの 1 つのエイリアスを定義するか、完全な名前を使用できます。

ただし、Common.Logging を使用している場合は、NLog への参照は必要ないと思います。Common.Logging ライブラリは単純な抽象化を導入して、実行時に特定のロギング実装を選択できるようにするためです。したがって、コードは、log4net や NLog などの他のログ システムではなく、Common.Logging ライブラリのみに依存する必要があります。

using Common.Logging; // only this library is used
...
ILog log = LogManager.GetCurrentClassLogger();

そして、 NLog を使用するように Common.Logging を構成します。

<configuration>
  <configSections>
    <sectionGroup name="common">
      <section name="logging" 
               type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>    
    <section name="nlog" 
             type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog">
        <arg key="configType" value="INLINE" />
      </factoryAdapter>
    </logging>
  </common>

  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="console" xsi:type="Console" 
              layout="${date:format=HH\:MM\:ss} ${logger} ${message}" />
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="console" />
    </rules>
  </nlog>
</configuration> 
于 2012-11-13T23:42:41.773 に答える