2009-12-19 2 views

답변

2

Fusion COM API를 사용할 수 있습니다. Zhang Junfeng은 managed wrapper이라고 썼다. 그것은 2004 년부터이지만, 그래서 더 이상 잘 작동 모르겠어요.

+2

COM 기반 Fusion API를 사용하는 것이 올바른 방법이지만 Assembly.Load를 시도하고 FileNotFoundException을 잡는 것이 훨씬 쉽습니다. –

+0

@Mike Post : 그러나 여기에는 어셈블리를 앱 도메인에로드하는 불행한 부작용이 있습니다. 이는 실제로 원하는 것은 아닙니다. 사용의 용이성이 항상 정확함을 넘어서는 것은 아닙니다 (나는 거의하지 않는다고 주장합니다). – casperOne

+1

ReflectionOnlyLoad는 어셈블리를 앱 도메인에로드하는 것과 동일한 부작용이 있습니다. 문서에서 작은 글씨를 읽으십시오. 복잡하지 않은 COM Fusion API를 사용해야하는 경우에는 다른 방법이 있습니다. –

0

어셈블리에 대한 GAC을 검사 하시겠습니까? 아니면 어셈블리가 컴퓨터에 있는지 알고 싶습니까?

조립품이 실제로 GAC에 있음에도 불구하고 기계 (appdomain에서로드 가능)에 관심이 없다면 어셈블리 이름 (강함, 보통, 가득 참 등)으로 LoadAssembly를 사용할 수 있습니다. 어셈블리가 Fusion에 의해로드 될 수 있다면 그것이 존재한다는 것을 알게 될 것입니다.

15

복잡한 것을 시도하지 않고도 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 자 구현에 의존하지 않는다.

+2

'gacutil.exe'를 셸링하고 출력을 캡쳐하는 것은 너무 복잡하다는 것을 제 정의하고 가능한 한 간단하게 작업하는 것을 좋아합니다. gacutil과 Fusion API를 사용하는 사이에는 논쟁의 여지가 있습니다. 내 대답보기 : http://stackoverflow.com/a/19459379/1004119. –

6

.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"); 
+1

Assembly.Load는 다른 위치도 검색합니다. 기본로드 컨텍스트에는 전역 어셈블리 캐시를 탐색하여 찾은 어셈블리, 런타임이 호스팅되는 경우 호스트 어셈블리 저장소 (예 : SQL Server) 및 응용 프로그램의 ApplicationBase 및 PrivateBinPath가 포함됩니다 도메인. - http://msdn.microsoft.com/cs-cz/library/dd153782.aspx – Bohdan

+1

http://msdn.microsoft.com/en-us/library/system과 결합하는 것이 좋습니다. reflection.assembly.globalassemblycache (v = vs.110) .aspx GlobalAssemblyCache 속성 – ErikEJ

7

그것은 ReflectionOnlyLoad 방법을 사용하는 것이 좋습니다. 이 메서드는 리플렉션 전용 컨텍스트에 어셈블리를로드합니다.이 컨텍스트에서는 검사는 가능하지만 실행되지는 않습니다.

관련 문제