我有一个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.'
我知道错误信息可能告诉我解决方案,不幸的是我不会说胡言乱语......
干杯球员
亚历..
答案 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。