无法加载文件或程序集'Microsoft.Practices.EnterpriseLibrary.Logging

Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Logging

我有启用 COM-Interop 的 C# 库 (DLL),我在其中配置 App.config 以启用企业日志记录。但是,一旦从 COM dll 调用我的 BootStrapper.Run,我就会不断收到以下错误,尽管我的 bin 文件夹中存在日志记录和通用 DLL Microsoft.Practices.EnterpriseLibrary.Logging.dll (v6.0.1304.0) Microsoft.Practices.EnterpriseLibrary.Common.dll (v6.0.1304.0)

{"An error occurred creating the configuration section handler for loggingConfiguration: Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

注意:如果我从控制台 (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);  
        }
}

我是不是遗漏了什么?

在 运行 融合记录器之后,我得到以下日志:

=== Pre-bind state information ===

LOG: DisplayName = Microsoft.Practices.EnterpriseLibrary.Logging, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (Partial) WRN: Partial binding information was supplied for an assembly: WRN: Assembly Name: Microsoft.Practices.EnterpriseLibrary.Logging, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | Domain ID: 1 WRN: A partial bind occurs when only part of the assembly display name is provided. WRN: This might result in the binder loading an incorrect assembly. WRN: It is recommended to provide a fully specified textual identity for the assembly, WRN: that consists of the simple name, version, culture, and public key token.

=== LOG:此绑定在默认加载上下文中启动。日志:未找到应用程序配置文件。日志:使用主机配置文件:日志: 使用来自的机器配置文件 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. 日志:此时未将策略应用于引用(私有, 自定义、部分或基于位置的程序集绑定)。

使用 Fusion 日志查看器,我发现有一些问题:

1) 我的 App.config 文件缺少 header(app.config) 中企业日志 dll 的版本信息。添加版本信息后,错误消息消失了。

2) 然后,我遇到了 DLL 地狱问题。 COM DLL 开始从 GAC 和 EXE 位置(但不在程序集位置)寻找其依赖项,因此它无法启动日志记录 DLL。

我选择将企业库日志 DLL 复制到 EXE 中并解决了这个问题。

非常感谢@rene 和@Hans,他们真的帮助了我。