如何从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>
我可以加载这个库。问题是它使用了一些需要在应用程序运行目录中的配置文件。是否有可能告诉库它需要的文件与库在同一文件夹中?
由于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>