2014-10-12 109 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