2014-10-12 5 views
3

나는 간단하게 할 수 있습니다가 어떻게 C#으로 하위 폴더에서 .DLL 라이브러리를 가져 옵니까 내가 응용 프로그램과 같은 폴더에있는 라이브러리가있을 때

[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

+0

제 3 자 dll이 C++로 만들어 졌다고 생각합니다. 그래서 나는이 방법으로 그것을 가져올 필요가있다. – sczdavos

+0

질문을 다시 작성했습니다. – sczdavos

답변

1

을 일시적 변화에 의미가 있습니다 그것을로드하기 전에 현재 디렉토리 :

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

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

Directory.SetCurrentDirectory(saveCurDir); 
0

앱의 .config 파일에 프로빙 태그를 추가하면됩니다. 당신은/lib 디렉토리/하위 디렉토리에서로드 할 라이브러리를 원하는 경우 예를 들어, 사용자의 설정이 같을 것이다 : 현재 디렉토리의 설정에 대한 DLL 검색 이후

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