log4net依赖问题

时间:2010-04-13 13:44:58

标签: c# .net visual-studio log4net

我有一个log4net的问题,这已经困扰了我一段时间,我已经决定对它进行排序。

我有一个引用log4net的类库。如果我在另一个项目中引用这个类库,那么我必须在这个项目中引用log4net,否则会出现构建错误

Unknown build error, 'Cannot resolve dependency to assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' 

我知道错误信息可能告诉我解决方案,不幸的是我不会说胡言乱语......

干杯球员

亚历..

4 个答案:

答案 0 :(得分:10)

以下链接描述了正在发生的事情以及如何解决问题:

http://blogs.msdn.com/jmstall/archive/2006/11/22/reflection-type-load-exception.aspx

以上链接的摘录:

  

所以发生了什么事情,它试图   获取Bar的System.Type,但是   解决加载所需的类型   基类,在另一个DLL中。   仅反射上下文不起作用   绑定策略,所以它找不到   DLL。 LoaderException提示说   使用ReflectionOnlyAssemblyResolve,   它提供了更多信息   此

要使用反射API,您必须解决所有使用的依赖项。

答案 1 :(得分:4)

在创建新的WPF项目并添加对引用log4net的另一个项目的引用时,我遇到了与log4net相同的问题。我通过使用以下说明将log4net.dll添加到GAC来解决了这个问题:http://msdn.microsoft.com/en-us/library/dkkx7f79.aspx

答案 2 :(得分:1)

我遇到了同样的问题。我仍然不完全理解它,但我可以告诉你我是如何解决我的问题的。 我有一个单元测试项目B,项目参考项目A,它引用了log4net。所以对我来说,乱码意味着当Visual Studio试图为单元测试项目创建.accessor文件时,它反映在项目A上。这意味着它试图加载项目A的引用,但是程序集加载器找不到它,因为我在GAC中没有log4net,只在本地为项目A引用。就我而言,将log4net添加到我的DEVPATH(GAC也可以工作)是解决方案。

答案 3 :(得分:1)

我知道已经有一段时间了,但是我想分享为我解决的问题。

看起来这个问题的主要原因是log4net在类库的汇编信息中要求它的配置文件的方式。 WPF似乎不喜欢这样。在wpf应用程序中本身引用log4net会导致我为log4net配置文件覆盖,因为wpf应用程序稍后会在构建顺序中生成默认的log4net配置文件。

因此,要修复用于预装程序集的类库,请按如下所示对其进行编辑:

在类库中,在AssemblyInfo.cs中删除此行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

现在,在库的入口点中,按以下方式设置记录器:

FileInfo configFileInfo = new FileInfo("log4net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);

如果在app.config文件中设置log4net,则只需引用该文件即可。

我找到了此解决方案here