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

时间:2014-10-12 13:11:10

标签: c# .net-3.5 dllimport loadlibrary

当我将库放在与app相同的文件夹中时,我可以简单地说:

[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>

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

2 个答案:

答案 0 :(得分:1)

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

string saveCurDir = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(Path.Combine(Application.StartupPath, "plugins"));

IntPtr iq_dll = LoadLibrary("IQPokyd.dll");

Directory.SetCurrentDirectory(saveCurDir);

答案 1 :(得分:0)

您可以通过在应用的.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>