如何从C#中的子文件夹导入.dll库

本文关键字:文件夹 导入 dll | 更新日期: 2023-09-27 18:26:14

当我将库与应用程序放在同一文件夹中时,我可以简单地:

[DllImport("kernel32")]
public extern static IntPtr LoadLibrary(string librayName);
IntPtr iq_dll = LoadLibrary("IQPokyd.dll");

我的app.config 中也有这个

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="plugins;" />
    </assemblyBinding>
  </runtime>
</configuration>

我可以加载这个库。问题是它使用了一些需要在应用程序运行目录中的配置文件。是否有可能告诉库它需要的文件与库在同一文件夹中?

如何从C#中的子文件夹导入.dll库

由于DLL在当前目录中搜索配置,因此在加载前临时更改当前目录是有意义的:

string saveCurDir = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(Path.Combine(Application.StartupPath, "plugins"));
IntPtr iq_dll = LoadLibrary("IQPokyd.dll");
Directory.SetCurrentDirectory(saveCurDir);

您可以通过在应用程序的.config文件中添加探测标记来实现这一点。例如,如果您希望从/lib/子目录加载库,那么您的配置将如下所示:

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib"/>
    </assemblyBinding>
  </runtime>
</configuration>