所以我为我的应用程序制作了一个更新程序。它下载我的应用程序(.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
从绝对路径加载,因为它可能会改变。
答案 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,你需要使用绝对路径。