【发布时间】: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