尝试通过反射加载应用程序并获取错误“无法加载文件或程序集......系统找不到指定的文件。”

时间:2008-11-14 11:53:04

标签: c# reflection

它试图找到的程序集不是根程序集 - 它是引用的程序集,但它位于同一文件夹中,而Directory.GetCurrentDirectory()是包含所有文件的文件夹。

我被困 - 任何建议?

4 个答案:

答案 0 :(得分:3)

你可以:

  1. 创建一个新的AppDomain以加载程序集(并将AppDomain的基目录设置为包含所有程序集的目录。)
  2. 附加AppDomain.AssemblyResolve的处理程序以帮助CLR找到程序集的依赖项。
  3. 您可以将相关目录添加到要探测的路径列表中。但是,它需要驻留在应用程序目录下的某个位置。有关详细信息,请参阅probe元素。

答案 1 :(得分:0)

你可以尝试使用类似的东西

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临时目录中。但是,因为文件处于同一级别,所以它们应该并排存在。

答案 2 :(得分:0)

如果使用assembly.loadfrom,则可以指定程序集的文件路径。

  

load-from上下文允许   要从没有路径加载的程序集   包含在探测中,但允许   对要找到的路径的依赖关系   并加载因为路径   信息由。维护   上下文。

答案 3 :(得分:0)

从具有引用的dll的文件夹执行程序也可以解决问题。