无法加载文件或程序集'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,他们真的帮助了我。
我有启用 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,他们真的帮助了我。