当我将库放在与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运行目录中的配置文件。是否有可能告诉库它需要的文件是否与库相同?
答案 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>