2014-10-12 108 views
3

当我在同一文件夹中的库作为应用程序,我可以简单:如何导入.dll文件库从子文件夹在C#

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

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

+0

IQPokyd.dll是一个.NET程序集吗?或者它是一个本地DLL? – Dmitry 2014-10-12 13:37:06

+0

这是第三方的dll我用C++编写。所以我需要以这种方式导入它。 – sczdavos 2014-10-12 13:38:18

+0

我改写了这个问题。 – sczdavos 2014-10-12 13:42:27

回答

1

由于在当前目录下的config中的DLL搜索,它是有道理的暂时变化加载之前的当前目录:

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

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

Directory.SetCurrentDirectory(saveCurDir); 
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> 
+0

我改写了这个问题。 – sczdavos 2014-10-12 13:43:07