【问题标题】: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 编写的吗?

标签: c# asp.net .net-assembly filenotfoundexception appdomain


【解决方案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();
} 

【讨论】:

  • 我已经尝试过您提供的代码,但问题是当前执行的程序集不是错误中提到的程序集。
猜你喜欢
  • 2021-03-02
  • 1970-01-01
  • 2020-08-17
相关资源
最近更新 更多