log4net依赖问题

Fer*_*ran 14 .net c# log4net visual-studio

我有一个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.' 
Run Code Online (Sandbox Code Playgroud)

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

干杯伙计们

亚历克斯..

kem*_*002 10

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

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

以上链接的摘录:

所以发生的事情是它试图获取Bar的System.Type,但要解析它需要加载基类的类型,这是另一个dll.Reflection-Only上下文不执行绑定策略,因此无法找到该dll.LoaderException提示使用ReflectionOnlyAssemblyResolve,它提供了有关此内容的更多信息.

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


小智 5

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

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

因此,要修复您的类库以与程序集预加载一起使用,请按如下方式编辑它:

在类库中删除 AssemblyInfo.cs 中的这一行:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
Run Code Online (Sandbox Code Playgroud)

现在,在库的入口点设置记录器,如下所示:

FileInfo configFileInfo = new FileInfo("log4net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo);
Run Code Online (Sandbox Code Playgroud)

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

在这里找到了这个解决方案。