【问题标题】:.Net/Mono & Ubuntu versus log4net.Net/Mono & Ubuntu 与 log4net
【发布时间】:2018-04-24 07:38:21
【问题描述】:

我被要求在 Ubuntu Linux (14.04) 上编写一个小型仪器校准应用程序,并且一直在编写一些小型概念验证应用程序(串行 i/o、GUI、SQLite 等)以查看是否单声道是一个很好的选择。事情进展顺利,直到我测试了我最喜欢的日志记录包 log4net。我无法让代码工作。这是一个在 Windows 机器上运行良好的简单测试应用:

using System;
using log4net;
using log4net.Config;

public class L
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Version: " + Environment.Version);
        XmlConfigurator.Configure(
            new System.IO.FileInfo("console.logconfig.xml"));
        Console.WriteLine("logging configured.");
        ILog log = LogManager.GetLogger("root");
        log.Info("This is an info message.");
        log.Warn("This is a warning message.");
        log.Error("This is an error message.");
    }
}

编译

gmcs -pkg:log4net,dotnet -main:L -out:L.exe L.cs

代码编译,但产生运行时错误:

Version: 2.0.50727.1433
Missing method System.Reflection.Assembly::op_Equality(Assembly,Assembly) in assembly /usr/lib/mono/2.0/mscorlib.dll, referenced in assembly /usr/lib/mono/gac/log4net/1.2.10.0__a5715cc6d5c3540b/log4net.dll

Unhandled Exception:
System.MissingMethodException: Method not found: 'System.Reflection.Assembly.op_Equality'.
  at log4net.LogManager.GetRepository (System.Reflection.Assembly repositoryAssembly) [0x00000] in <filename unknown>:0
  at log4net.Config.XmlConfigurator.Configure (System.IO.FileInfo configFile) [0x00000] in <filename unknown>:0
  at L.Main (System.String[] args) [0x00000] in <filename unknown>:0

这看起来像是 .Net 版本不匹配(也许 op_equality 在 .Net 2.0 中不可用?)。当我尝试强制使用 SDK 4 或 4.5 版本时:

gmcs -sdk:4.5 -pkg:log4n35,dotnet -main:L -out:L.exe L.cs

我得到一个编译错误:

error CS0006: Metadata file `cscompmgd.dll' could not be found

这是在一个全新的 Ubuntu 14.04 VM 上,通过以下方式安装了 Mono:

sudo apt-get install mono-complete
sudo apt-get install liblog4net1.2-cil
sudo apt-get install liblog4net-cil-dev

请推荐?

【问题讨论】:

  • 1.2.10 真的很老,并且已知在 .NET 4.x 上存在问题。您是否尝试过更新的版本? logging.apache.org/log4net/download_log4net.cgi
  • @Stefan,就是这样——更新的版本修复了所有问题。 (叹气)我认为我不需要将 log4net 从 Apache 站点中删除,因为我认为 Ubuntu 存储库将包含当前版本。傻我。感谢您的帮助!

标签: mono log4net


【解决方案1】:

不幸的是,为 Ubuntu (1.2.10) 打包的 log4net 版本非常旧,并且已知在 .NET 4.0 上存在问题。 1.2.11 已于 2011 年 10 月发布,在撰写本文时,1.2.13 是最新版本。

您需要直接从 Apache log4net 站点下载最新版本:http://logging.apache.org/log4net/download_log4net.cgi

【讨论】:

    【解决方案2】:

    你几乎拥有它; Ubuntu 14.04:

    gmcs -sdk:4.5 -r:/usr/lib/cli/log4net-1.2/log4net.dll App.cs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2012-02-18
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 2018-06-12
      相关资源
      最近更新 更多