Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法加载文件或程序集';Microsoft.Practices.EnterpriseLibrary.Logging_C#_.net_.net Assembly_Enterprise Library - Fatal编程技术网

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

C# 无法加载文件或程序集';Microsoft.Practices.EnterpriseLibrary.Logging,c#,.net,.net-assembly,enterprise-library,C#,.net,.net Assembly,Enterprise Library,我已经启用了COM互操作的C#库(DLL),我在其中配置了App.config以启用企业日志记录。但是,一旦从COM dll调用了我的BootStrapper.Run,我就会不断得到以下错误,尽管日志记录和常见dll存在于我的bin文件夹中 Microsoft.Practices.EnterpriseLibrary.Logging.dll(v6.0.1304.0) Microsoft.Practices.EnterpriseLibrary.Common.dll(v6.0.1304.0) {”为创

我已经启用了COM互操作的C#库(DLL),我在其中配置了App.config以启用企业日志记录。但是,一旦从COM dll调用了我的BootStrapper.Run,我就会不断得到以下错误,尽管日志记录和常见dll存在于我的bin文件夹中 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(),则logger facade初始化成功。但当我从启用COM互操作的C#DLL调用相同的函数时,我会出现上述错误

我在尝试初始化LogWriterFactory(try块中的第3行)时遇到了提到的异常

我是不是遗漏了什么

运行fusion logger后,我得到以下日志:

==预绑定状态信息===

LOG:DisplayName=Microsoft.Practices.EnterpriseLibrary.Logging, 区域性=中性,PublicKeyToken=31bf3856ad364e35(部分)警告: 为程序集提供了部分绑定信息:警告: 程序集名称:Microsoft.Practices.EnterpriseLibrary.Logging, 区域性=中性,PublicKeyToken=31bf3856ad364e35 |域ID:1警告:A 当仅显示部件显示名称的一部分时,会发生部分绑定 提供。警告:这可能导致活页夹加载错误 assembly.WRN:建议提供完全指定的文本 程序集的标识,WRN:由简单名称组成, 版本、区域性和公钥令牌

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


使用Fusion log viewer,我发现存在一些问题:

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

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

我选择将企业库日志DLL复制到EXE中,并修复了该问题


非常感谢@rene和@Hans在这里真正帮助了我。

我通常通过启用fusion日志来诊断此类错误,然后检查日志,查看它实际尝试从何处加载/探测这些程序集。@rene我收到fusion日志的以下日志消息:FusionLog=”===预绑定状态信息==\r\nLOG:DisplayName=Microsoft.Practices.EnterpriseLibrary.Logging,区域性=中性,PublicKeyToken=31bf3856ad364e35\n(部分)\r\nWRN:为程序集提供了部分绑定信息:\r\nWRN:程序集名称:Mi…其中有一大堆它应该探测的路径。您在那里看到的文件夹是否如您所期望的那样?如中所示,其中一个文件夹包含应用程序中的dll?我看到企业日志dll来自:..\\packages\enterpriseeLibrary.Logging.6.0.1304.0\lib\NET45\Microsoft.Practices.enterpriseelibrary.Logging.dll以及Microsoft.Practices.enterpriseelibrary.Common.dll我认为Hans的回答是相关的:
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);  
        }
}