我被要求在Ubuntu Linux(14.04)上编写一个小型仪器校准应用程序,并且已经编写了一些小型概念验证应用程序(串行i / o,GUI,SQLite等)看看Mono是否合适。事情进展顺利,直到我测试了我最喜欢的日志包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版本不匹配(。{2.0}中可能没有op_equality
?)。当我尝试强制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虚拟机,通过以下方式安装Mono:
sudo apt-get install mono-complete
sudo apt-get install liblog4net1.2-cil
sudo apt-get install liblog4net-cil-dev
建议,拜托?
答案 0 :(得分: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
答案 1 :(得分:0)
你几乎拥有它; Ubuntu 14.04:
gmcs -sdk:4.5 -r:/usr/lib/cli/log4net-1.2/log4net.dll App.cs