尝试通过反射加载应用程序并获取错误“无法加载文件或程序集......系统找不到指定的文件。”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试通过反射加载应用程序并获取错误“无法加载文件或程序集......系统找不到指定的文件。”相关的知识,希望对你有一定的参考价值。
它试图找到的程序集不是根程序集 - 它是引用的程序集,但它位于同一文件夹中,而Directory.GetCurrentDirectory()是包含所有文件的文件夹。
我被困 - 任何建议?
答案
你可以:
- 创建一个新的
AppDomain
来加载程序集(并将AppDomain
的基目录设置为包含所有程序集的目录)。 - 附加
AppDomain.AssemblyResolve
的处理程序以帮助CLR找到程序集的依赖项。 - 您可以将相关目录添加到要探测的路径列表中。但是,它需要驻留在应用程序目录下的某个位置。有关详细信息,请参阅probe元素。
另一答案
你可以尝试使用这样的东西
string myDll = string.Empty;
string location = Assembly.GetExecutingAssembly().Location;
if (location != null)
{
myDll = string.Format(@"{0}my.assembly.name.dll", location.Substring(0, location.LastIndexOf(@"")));
}
这应该得到程序集正在运行的物理目录。这可能在Windows .NET临时目录中。但是,因为文件处于同一级别,所以它们应该并排存在。
另一答案
如果使用assembly.loadfrom,则可以指定程序集的文件路径。
load-from上下文允许从未包含在探测中的路径加载程序集,但允许查找和加载该路径的依赖项,因为路径信息由上下文维护。
另一答案
从具有引用的dll的文件夹执行程序也可以解决问题。
以上是关于尝试通过反射加载应用程序并获取错误“无法加载文件或程序集......系统找不到指定的文件。”的主要内容,如果未能解决你的问题,请参考以下文章
System.BadImageFormatException:无法加载文件或程序集(来自 installutil.exe)