프로그래밍 방식으로 GAC에서 어셈블리를 확인하는 방법?어셈블리에 대해 GAC 확인
답변
Fusion COM API를 사용할 수 있습니다. Zhang Junfeng은 managed wrapper이라고 썼다. 그것은 2004 년부터이지만, 그래서 더 이상 잘 작동 모르겠어요.
어셈블리에 대한 GAC을 검사 하시겠습니까? 아니면 어셈블리가 컴퓨터에 있는지 알고 싶습니까?
조립품이 실제로 GAC에 있음에도 불구하고 기계 (appdomain에서로드 가능)에 관심이 없다면 어셈블리 이름 (강함, 보통, 가득 참 등)으로 LoadAssembly를 사용할 수 있습니다. 어셈블리가 Fusion에 의해로드 될 수 있다면 그것이 존재한다는 것을 알게 될 것입니다.
복잡한 것을 시도하지 않고도 gacutil
으로 쉘 아웃하여 출력을 캡처 할 수 있습니다. 예를 들어, gacutil /l Microsoft.Practices.Unity
저를 제공합니다
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31
bf3856ad364e35, processorArchitecture=MSIL
Number of items = 1
gacutil /l Some.Nonexistant.Assembly
대 :
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Number of items = 0
이 구현 및 분석이 용이하고 제 3 자 구현에 의존하지 않는다.
'gacutil.exe'를 셸링하고 출력을 캡쳐하는 것은 너무 복잡하다는 것을 제 정의하고 가능한 한 간단하게 작업하는 것을 좋아합니다. gacutil과 Fusion API를 사용하는 사이에는 논쟁의 여지가 있습니다. 내 대답보기 : http://stackoverflow.com/a/19459379/1004119. –
.NET에서 리플렉션 API - Assembly.Load(...)
은 어셈블리를 찾지 못하면 FileNotFoundException
을 표시합니다. API에는 정규화 된 어셈블리 이름이 필요하므로 GAC에 있어야한다고 가정합니다. 나는의 SQL Server Compact Edition 존재를 테스트하는 데 사용하고 있습니다 :
Assembly foo = Assembly.Load("System.Data.SqlServerCe, Version=3.5.1.0, " +
"Culture=neutral, PublicKeyToken=89845dcd8080cc91");
Assembly.Load는 다른 위치도 검색합니다. 기본로드 컨텍스트에는 전역 어셈블리 캐시를 탐색하여 찾은 어셈블리, 런타임이 호스팅되는 경우 호스트 어셈블리 저장소 (예 : SQL Server) 및 응용 프로그램의 ApplicationBase 및 PrivateBinPath가 포함됩니다 도메인. - http://msdn.microsoft.com/cs-cz/library/dd153782.aspx – Bohdan
http://msdn.microsoft.com/en-us/library/system과 결합하는 것이 좋습니다. reflection.assembly.globalassemblycache (v = vs.110) .aspx GlobalAssemblyCache 속성 – ErikEJ
그것은 ReflectionOnlyLoad
방법을 사용하는 것이 좋습니다. 이 메서드는 리플렉션 전용 컨텍스트에 어셈블리를로드합니다.이 컨텍스트에서는 검사는 가능하지만 실행되지는 않습니다.
- 1. 닫힌 소스 어셈블리에 대해 "확인할 수없는 코드 실패 정책 확인"
- 2. VS2008은 솔루션 폴더에있는 어셈블리에 대한 GAC 참조를 선호합니다.
- 3. 아음속 GAC 문제
- 4. 로드 된 어셈블리에 대해 유형이 null을 반환합니까?
- 5. 참조 된 어셈블리에 대해 FileNotFoundException이 throw되었습니다.
- 6. "간접 참조가 어셈블리에 대해 발생했습니다"빌드 오류
- 7. 어셈블리 로더가 C++/CLI 혼합 모드 어셈블리에 대해 GAC를 체크인하지 않는 이유는 무엇입니까?
- 8. FxCop 및 GAC Madness
- 9. ASP.Net 다시 시작/GAC 새로 고침
- 10. 아래 어셈블리에 대해 이야기 할 때, FPGA의 넷리스트는 어디에서 떨어질까요?
- 11. 계측 된 어셈블리에 대해 강력한 이름 확인에 실패했습니다. - Ninject
- 12. IntPtr.ToInt32() Marshal.ThrowExceptionForHR() - GAC 쿼리
- 13. 빈에 GAC 어셈블리 포함
- 14. ClickOnce 및 GAC
- 15. GAC 어셈블리 버전의 Web.config
- 16. COM 등록 및 GAC
- 17. GAC 설치를 다시 방문하십시오
- 18. ASP.NET 및 GAC
- 19. 12hive & GAC 비교?
- 20. 아음속 2.1 gac?
- 21. GAC-DLL에 DLL 배치
- 22. GAC (전역 어셈블리 캐시) 사용 방법 -
- 23. NDepend 어셈블리에 대한 메트릭
- 24. 버전 제어에 참조 된 어셈블리 추가 또는 GAC 참조 유지
- 25. 어셈블리에 개체 포함
- 26. 인라인 어셈블리에 포함
- 27. GAC 및 어셈블리 버전 관리
- 28. 빈과 gac 모두에서 Dll이 사용됩니까?
- 29. GAC 어셈블리의 경우 CopyLocal = True
- 30. vbscript를 사용하여 GAC 어셈블리를 제거하십시오.
COM 기반 Fusion API를 사용하는 것이 올바른 방법이지만 Assembly.Load를 시도하고 FileNotFoundException을 잡는 것이 훨씬 쉽습니다. –
@Mike Post : 그러나 여기에는 어셈블리를 앱 도메인에로드하는 불행한 부작용이 있습니다. 이는 실제로 원하는 것은 아닙니다. 사용의 용이성이 항상 정확함을 넘어서는 것은 아닙니다 (나는 거의하지 않는다고 주장합니다). – casperOne
ReflectionOnlyLoad는 어셈블리를 앱 도메인에로드하는 것과 동일한 부작용이 있습니다. 문서에서 작은 글씨를 읽으십시오. 복잡하지 않은 COM Fusion API를 사용해야하는 경우에는 다른 방법이 있습니다. –