【问题标题】:Loading Assemblies with referenced dll's使用引用的 dll 加载程序集
【发布时间】:2014-03-02 13:16:30
【问题描述】:

我正在尝试将程序集加载到新域中, 但是我不断收到找不到指定文件的错误,

请注意,我有一个名为“扩展”的目录,其中包含一个文件夹“检查”,其中包含许多 dll

“System.IO.FileNotFoundException:无法加载文件或程序集'InspectBLL,版本=1.0.0.0,文化=中性,PublicKeyToken=null'” 我目前正在做以下事情

    public AppDomain GetAppDomain(DirectoryInfo dir, string domainName)
    {
        var assemblydll = dir.GetFiles().FirstOrDefault(x => x.Name.Contains("ServerDLL"));
        AppDomainSetup domaininfo = new AppDomainSetup();
        domaininfo.ApplicationBase = dir.FullName;
        AppDomain domain = AppDomain.CreateDomain(domainName, null, domaininfo);
        foreach (var item in dir.GetFiles())
        {
            var bytes = File.ReadAllBytes(item.FullName);
            domain.Load(bytes);
        }
        return domain;
    }

我发现的新信息,它似乎正在寻找.exe所在的dll,这很糟糕。 (我将 dll 复制到 exe 中一切正常,但我需要它位于文件夹扩展\Inspect 中)

【问题讨论】:

  • 那么它试图加载什么文件?您是否尝试过在线搜索错误?你能 echo item.fullname 并检查它是否存在?
  • 它确实存在,因为我使用的是 DirectoryInfo,我确实检查了什么文件,并且该文件确实存在于文件夹中,我正在编辑帖子以获取更多信息
  • 使用 Assembly.Load(byte[]) 通常是一个非常糟糕的主意,程序集在没有加载上下文的情况下加载。因此,CLR 在查找依赖程序集时会遇到很多麻烦。它当然不知道 dir 中也存在这样的程序集。除了这样做,使用 Fuslogvw.exe 解决程序集解析问题,使用 AppDomain.AssemblyResolve 帮助 CLR 找到它们。
  • 我也试过了 var assName = AssemblyName.GetAssemblyName(item.FullName); domain.Load(assName);相同的异常
  • 我无法弄清楚为什么它不会加载 dll,除非 dll 与 exe 位于同一文件夹中

标签: c# assemblies


【解决方案1】:

我设法解决了这个问题

AppDomain.CurrentDomain.AssemblyResolve

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多