无法加载文件或程序集,但已加载

Posted

技术标签:

【中文标题】无法加载文件或程序集,但已加载【英文标题】:Could not load file or assembly but they are loaded 【发布时间】:2018-02-21 13:33:41 【问题描述】:

我有一个项目正在进行,它使用来自 ERP 系统的 DLL。 DLL 用于从 ERP 中获取信息,例如发票等。 我得到的错误是:

内部异常 1:FileNotFoundException:无法加载文件或 程序集 'SnelStartGatewayInterface,版本 = 12.48.37.0, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。这 系统找不到指定的文件。

但在同一个窗口中,我使用“watch 1”来查看当前使用的程序集,方法是:

AppDomain.CurrentDomain.GetAssemblies()

它返回几个程序集。 这是加载的,与错误中看到的完全相同:

+ [36] SnelStartGatewayInterface,版本=12.48.37.0,文化=中性,PublicKeyToken=null System.Reflection.Assembly System.Reflection.RuntimeAssembly

为什么它会返回错误?

附言。我在 Windows 窗体测试应用程序中尝试了完全相同的方法和 dll,并且运行良好。

【问题讨论】:

看看“...或其依赖项之一。系统找不到指定的文件。”可能是依赖加载失败。 我对编程有点陌生,还没有使用过 Dll。你能给我帮助并告诉我在哪里可以找到依赖项或帮助我查看加载的依赖项。 @Naaman 看看我的回答。有示例代码可以获取所有引用的程序集。 这感觉就像XY Problem。您真正想要完成什么?通常,对于 托管 程序集,您在编译它们之前设置一个引用,您不会使用反射加载它们。这是某种部署问题吗? ERP 系统 DLL 甚至是用 .NET 编写的吗? 【参考方案1】:

就像 cmets 中提到的 Pawl Lukasik 一样,您应该查看依赖关系。

为此,请使用:

private List<string> ListReferencedAssemblies()

    List<string> refList = new List<string>();
    var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
    foreach (var assembly in assemblies)
    
        refList.Add(assembly.Name);
    

    return refList;
 

查看所有引用的程序集。

或使用 LINQ:

private List<string> ListReferencedAssemblies()

    return Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(x => x.FullName).ToList();
 

【讨论】:

我已经尝试过您提供的代码,但问题是当前执行的程序集不是错误中提到的程序集。

以上是关于无法加载文件或程序集,但已加载的主要内容,如果未能解决你的问题,请参考以下文章

能加载文件或程序集“Aspose.Cells”或它的某一个依赖项。无法验证强名称签名

无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0

无法加载文件或程序集'netstandard,版本 = 2.0.0.0

无法加载文件或程序集...尝试加载格式不正确的程序 (System.BadImageFormatException)

寻找解决策略:无法加载文件或程序集[重复]

无法加载文件或程序集 Microsoft.CodeAnalysis