Assembly.LoadFrom(...)与第一个可执行文件相对

时间:2017-07-04 13:59:03

标签: c# dll reflection .net-assembly assemblies

所以我为我的应用程序制作了一个更新程序。它下载我的应用程序(.dll文件)tp %appdata%/Folder并通过这样的反射打开它:

var appdataFolder =
        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\[ApplicationName]\";

var mainAssembly = Assembly.LoadFrom(appdataFolder + @"TF2Callout.dll");
mainAssembly.GetType("TF2Callout.App").GetMethod("Main").Invoke(null, null);

这将打开.dll并执行静态void Main。但在我的申请中,我有这个:

Assembly.LoadFrom("SomeOtherDll.dll");

我希望应用程序在%appdata%/[application name]文件夹中搜索.dll,因为它保存在那里,但是,它会尝试在安装程序的文件夹中找到该文件,该文件位于我的程序文件中。

我该如何解决这个问题?我宁愿不让SomeOtherDll.dll从绝对路径加载,因为它可能会改变。

1 个答案:

答案 0 :(得分:0)

Assembly.LoadFrom的行为符合https://msdn.microsoft.com/en-us/library/1009fa28(v=vs.110).aspx

的规定
  

assemblyFile可以是当前目录的绝对值或相对值,以及   程序集将加载到调用者的域中。

https://msdn.microsoft.com/en-us/library/system.io.directory.getcurrentdirectory(v=vs.110).aspx详细了解current directory的含义。

如果要从特定位置加载,则必须使用绝对路径。您可以使用appdataFolder或检查现有DLL的路径(例如How to get the location of the DLL currently executing?)来构造该绝对路径。但从根本上说,如果你想要可靠地加载DLL,你需要使用绝对路径。