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

时间:2018-07-17 07:15:13

标签: c# .net .net-assembly enterprise-library

我有启用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。   日志:目前未将政策应用于引用(私有,   自定义,部分或基于位置的程序集绑定)。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

非常感谢@rene和@Hans,他们在这里确实为我提供了帮助。