从相对路径加载c#中的dll

时间:2016-02-10 13:45:26

标签: c# dll .net-assembly

我在运行时加载一个dll,如下所示:

var DLL = Assembly.LoadFile(@"..\..\BuildDLLs\myDLL.dll");

我收到一个要求绝对路径的ArgumentException。

我不想使用绝对路径,我想使用相对路径。

我该怎么做?

3 个答案:

答案 0 :(得分:9)

简单。做一个额外的步骤:

var dllFile = new FileInfo(@"..\..\BuildDLLs\myDLL.dll");
var DLL = Assembly.LoadFile(dllFile.FullName);

答案 1 :(得分:4)

我不知道使用相对路径的方法,所以其他人可能会有答案。但是,您可以从相对路径构建绝对路径并使用它。

// Gets the folder path in which your .exe is located
var parentFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);

// Makes the absolute path
var absolutePath = Path.Combine(parentFolder, "\BuildDLLs\myDLL.dll");

// Load the DLL using the absolute path
var DLL = Assembly.LoadFile(absolutePath);

现在,如果您的计划被移动,它仍然有效。

答案 2 :(得分:1)

我也不知道在运行时使用相对路径加载库的方法,但是如果路径只是相对于用户光盘上的项目位置而是相对于项目具有固定位置,那么你可以使用这样的东西:

System.Reflection.Assembly.GetEntryAssembly().Location;
//to get the path of your main applications .exe

Directory.GetParent(String)
//to move your way upwards in your folder sturcture

然后

Path.Combine(String, String)
/*to combine the path you just navigated to inside your project with the knowledge of where you can find your .dll inside of your folder sturcture and combine them into one path again.*/

也许这有助于你解决问题,我也用过这个"脏"在运行时加载一些.dll的方法。如果你当然有一个固定的文件夹结构,这个工作正常。