구조 :- \bin\debug\abc.exe
및 \Libs\win32\xyz.dll
입니다. abc.exe
을 실행하려면 xyz.dll
을 참조해야합니다. 나는 app.config
에서 "probing"태그로 시도했지만이 경우 이있는 곳에 debug
'폴더에 'Libs
'폴더가있는 경우에만 가능성이있었습니다. 하지만 .exe에서 2 개의 폴더를 가져온 다음 \Libs\win32
으로 이동하여 .dll을 참조하고 싶습니다. 내가 어떻게해야하는지 제안 해주세요.는 .net dll을 exe 디렉토리가 아닌 다른 폴더에서 가져옵니다.
답변
파일 경로에서 .. \를 사용하여 디렉토리를 위로 이동합니다. 당신이 abc.exe 빈 \ 디버그 \ \ 에 있다면 프로젝트를 빌드 할 때
그럼 \ libs와 \의는 Win32에 대한 참조는 \ xyz.dll는
..\..\Libs\win32\xyz.dll
이 만 필요합니다 될 것입니다 , 당신의 실행 파일이 dll을 올바르게 참조하고 있다면 빌드 될 때 dll과 같은 폴더에 넣기 만하면됩니다.
물론 dllimport 또는 런타임 중에 dll의 정확한 경로를 알아야하는 경우를 제외하고는.
하지만이 경로는 어디에 사용해야합니까? app.confog의
아니요. exe를 실행할 때만 다른 폴더의 DLL을 참조해야합니다. – user3743646
이 DLL을 정확히 사용하는 방법은 일반 .NET 프로젝트 참조 또는 Win32 dll 또는 다른 것입니까? 빌드 할 때 같은 폴더 나 하위 폴더에 복사하지 않는 이유가 있습니까? – Nanhydrin
하나의 옵션이 AssemblyResolve
이벤트를 처리하고, 때마다 .NET은이 AssemblyResolve
이벤트를 트리거 전류 경로의 조립이 필요 찾을 수 없습니다 :
{
// Execute in startup
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
}
private Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
{
string RESOURCES = ".resources";
try
{
/* Extract assembly name */
string[] sections = args.Name.Split(new char[] { ',' });
if (sections.Length == 0) return null;
string assemblyName = sections[0];
/* If assembly name contains ".resource", you don't need to load it*/
if (assemblyName.Length >= RESOURCES.Length &&
assemblyName.LastIndexOf(RESOURCES) == assemblyName.Length - RESOURCES.Length)
{
return null;
}
/* Load assembly to current domain (also you can use simple way to load) */
string assemblyFullPath = "..//..//Libs//" + assemblyName;
FileStream io = new FileStream(assemblyNameWithExtension, FileMode.Open, FileAccess.Read);
if (io == null) return null;
BinaryReader binaryReader = new BinaryReader(io);
Assembly assembly = Assembly.Load(binaryReader.ReadBytes((int)io.Length));
return assembly;
}
catch(Exception ex)
{}
}
* 또 다른 옵션은 현재에 필요한 모든 어셈블리를로드 도메인을 시작하십시오.
- 1. exe 파일에 DLL을 삽입
- 2. VS 디버그에서와 다른 bin 폴더에서 프로젝트의 EXE
- 3. android_assets 폴더에서 dll을 동적으로로드하십시오.
- 4. 다른 폴더에서 DLL 참조를로드합니까?
- 5. 배포 AutoCAD를 .NET DLL을
- 6. .Net dll을 실행하십시오.
- 7. 모든 폴더에서 모든 .py 파일을 반복적으로 가져옵니다.
- 8. .NET 응용 프로그램에 EXE 및 필수 DLL을 포함하고 런타임시 실행
- 9. 디렉토리를 서브 디렉토리가 아닌 다른 디렉토리로 리디렉션
- 10. 다른 .dll을 참조하는 .dll을 만듭니다.
- 11. .NET dll을/SPARQL
- 12. 하위 폴더에서 기본 파일 (다른 모듈 아님)을 가져옵니다.
- 13. 뷰가 아닌 다른 폴더에서 페이지를 얻으려면 어떻게해야합니까?
- 14. .Net 용 GAC에 DLL을 설치하십시오.
- 15. 다른 솔루션에서 DLL을 디버그
- 16. .dll에 C# .exe .exe/.dll처럼 .dll을 실행하거나 실행하십시오.
- 17. 다른 publicKeyToken을 가진 .Net dll을 업그레이드하십시오.
- 18. OS가 .net dll과 다른 dll을 어떻게 구별합니까?
- 19. py2exe에서 exe 파일의 경로를 가져옵니다.
- 20. .net dll을 어떻게 설치합니까?
- 21. Windsor Castle이있는 디렉토리에서 DLL을 가져옵니다.
- 22. .NET 프로젝트에서이 DLL을 참조하려면 COM DLL을 등록해야합니까?
- 23. . DLL을 사용하지 않는 .NET.
- 24. .Net Logger DLL을 사용하여
- 25. 집계에서 다른 fileds의 null이 아닌 값을 가져옵니다.
- 26. VB6 프로그램이 지정된 폴더에서 dll을 사용하도록하려면 어떻게합니까?
- 27. exe 실행을 위해 opencv dll을 포함하는 방법
- 28. Java Maven Project가 다른 프로젝트의 디렉토리가 아닌 다른 프로젝트로 나타납니다
- 29. AppDomain, 어셈블리 .exe 또는 .dll을 실행 중입니까?
- 30. 는 .NET 코드에서 디렉토리 루프
리플렉션을 사용하여 어셈블리로드 –
이런 종류의 DLL을 호출하는 것은 의도적으로 매우 현명하지 않으며 CLR은 발을 쏠 때 피하는 데 도움이되도록 최선을 다합니다. 이를 무효로하려면 AppDomain.AssemblyResolve 이벤트가 필요하며 해당 이벤트의 이벤트 처리기에서 Assembly.LoadFrom()을 사용합니다. 아직 Main() 메소드에서 필요하지 않은지 확인하십시오. –