我有启用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)
{“在为以下内容创建配置节处理程序时发生错误 loggingConfiguration:无法加载文件或程序集 'Microsoft.Practices.EnterpriseLibrary.Logging,版本= 6.0.0.0, 文化=中性,PublicKeyToken = 31bf3856ad364e35'或其中之一 依赖性。系统找不到指定的文件。
注意:如果我从控制台(EXE)应用程序调用BootStrapper.Run(),则记录器外观初始化成功。但是,当我从启用COM-Interop的C#DLL中调用相同文件时,会出现上述错误。
当尝试初始化LogWriterFactory时(尝试块的第三行),我得到了提到的异常
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, 文化=中性,PublicKeyToken = 31bf3856ad364e35(部分)WRN: 为程序集提供了部分绑定信息:WRN: 程序集名称:Microsoft.Practices.EnterpriseLibrary.Logging, 文化=中性,PublicKeyToken = 31bf3856ad364e35 |网域ID:1 WRN:A 当部分装配显示名称为 提供。 WRN:这可能导致活页夹加载不正确 部件。 WRN:建议提供完整指定的文本 程序集的标识WRN:由简单名称组成, 版本,文化和公钥令牌。
=== LOG:此绑定在默认的加载上下文中启动。日志:找不到应用程序配置文件。日志:使用主机配置文件:日志: 使用机器配置文件从 C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config。 日志:目前未将政策应用于引用(私有, 自定义,部分或基于位置的程序集绑定)。
答案 0 :(得分:0)
我使用Fusion日志查看器发现了一些问题:
1)我的App.config文件缺少标头(app.config)中企业日志记录dll的版本信息。添加版本信息后,错误消息消失了。
2)然后,我遇到了DLL地狱问题。由于无法启动日志记录DLL,COM DLL开始从GAC和EXE位置(但不在程序集位置)寻找其依赖项。
我选择将企业库日志DLL复制到EXE并解决此问题。
非常感谢@rene和@Hans,他们在这里确实为我提供了帮助。