我有启用 COM-Interop 的 C# 库 (DLL),我在其中配置了 App.config 以启用企业日志记录。但是,一旦我的 BootStrapper.Run 从 COM dll 中调用,我就会不断收到以下错误,尽管我的 bin 文件夹 Microsoft.Practices.EnterpriseLibrary.Logging.dll (v6.0.1304.0) Microsoft.Practices 中存在日志记录和通用 DLL。 EnterpriseLibrary.Common.dll (v6.0.1304.0)
{“为 loggingConfiguration 创建配置节处理程序时发生错误:无法加载文件或程序集 'Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到指定的文件。
注意:如果我从控制台 (EXE) 应用程序调用 BootStrapper.Run(),则记录器外观初始化成功。但是,当我从启用 COM-Interop 的 C# DLL 调用相同的代码时,出现上述错误。
尝试初始化 LogWriterFactory 时出现上述异常(try 块中的第 3 行)
public LoggingService()
{
try
{
var appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
IConfigurationSource configurationSource = new FileConfigurationSource(appConfig.FilePath);
var logWriterFactory = new LogWriterFactory(configurationSource);
Logger.SetLogWriter(logWriterFactory.Create());
}
catch(Exception exception)
{
Console.Write(exception.Message);
}
}
我在这里错过了什么吗?
运行 fusion logger 后,我得到以下日志:
=== 预绑定状态信息 ===
LOG:DisplayName = Microsoft.Practices.EnterpriseLibrary.Logging,Culture=neutral,PublicKeyToken=31bf3856ad364e35(部分) WRN:为程序集提供了部分绑定信息:WRN:程序集名称:Microsoft.Practices.EnterpriseLibrary.Logging,Culture=neutral, PublicKeyToken=31bf3856ad364e35 | 域 ID:1 警告:仅提供程序集显示名称的一部分时会发生部分绑定。警告:这可能会导致活页夹加载错误的程序集。WRN:建议为程序集提供完全指定的文本标识,WRN:由简单名称、版本、区域性和公钥标记组成。
=== LOG:此绑定在默认加载上下文中启动。日志:未找到应用程序配置文件。LOG:使用主机配置文件:LOG:使用来自 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 的机器配置文件。日志:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。
使用 Fusion 日志查看器,我发现存在一些问题:
1) 我的 App.config 文件缺少标头 (app.config) 中企业日志 dll 的版本信息。添加版本信息后,错误消息消失了。
2) 然后,我遇到了 DLL 地狱问题。COM DLL 开始从 GAC 和 EXE 位置(但不在程序集位置)查找其依赖项,因此无法启动日志记录 DLL。
我选择将企业库日志 DLL 复制到 EXE 中并修复了该问题。
非常感谢 @rene 和 @Hans,他们在这里真的帮助了我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句