2010-12-03 3 views
0

리플렉션을 이해하기위한 테스트 프로젝트를 만들었습니다. .NET 4.0 GAC에서 어셈블리를로드하고 있습니다. (내가 알고있는 것처럼, .NET 4.0은 C에서 GAC를의 유지 : \ WINDOWS \ Microsoft.NET \ 조립)어셈블리가 GAC에서로드되었지만 FALSE를 반환하는 Assembly.GlobalAssemblyCache

나는이 같은 코드를 썼다 : 항상

Assembly testAssembly = Assembly.ReflectionOnlyLoadFrom(@"C:\WINDOWS\Microsoft.NET\assembly\GAC_32\TestReflection\v4.0_1.0.0.0__7ff2353191526e8c\TestReflection.dll"); 

     if(testAssembly.GlobalAssemblyCache) 
      Console.WriteLine(testAssembly.FullName); 

이 코드를 실행 GlobalAssemblyCache 속성을 GAC에서 어셈블리를로드하고 있지만 FALSE를 반환합니다.

누군가 내게 이유를 말해 줄 수 있습니까? 또는 나는 무엇인가 놓치고 있냐?

답변

1

먼저 어셈블리가 실제로 GAC에로드되었는지 확인할 수 있습니다. 다음 시도 할 수있는 일을 위해 :

Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

The Global Assembly Cache contains the following assemblies: 
    System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86 
    System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
    System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86 

Number of items = 3 

그런 ReflectionOnly 사용을 위해 GAC에서 어셈블리를로드하기 위해 당신이 시도 할 수 있습니다와 GAC에서 어셈블리의 세부 사항을 제공 할 것

gacutil /l System.Data 

ReflectionOnlyLoad 대신

ReflectionOnlyLoadFrom 예 :

Assembly testAssembly = Assembly.ReflectionOnlyLoad(@"System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"); 

if (testAssembly.GlobalAssemblyCache) { 
    Console.WriteLine(testAssembly.FullName); 
    Console.WriteLine(testAssembly.Location); 
} else { 
    Console.WriteLine("Not found in GAC"); 
} 
도움이

System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll 

희망 :

는 위의 다음과 같은 출력을 제공합니다!

+0

정말 도움이 될 것 같습니다. 하지만 gacutil/l TestReflection.dll을 실행하면 0 개의 어셈블리가 발견되었습니다. 그러나 실제로 .NET 4.0의 GAC 폴더로 이동하면 어셈블리가 표시됩니다. 어떤 아이디어가 문제 일 수 있습니까? – Learner

+0

@Amey :'gacutil/i '옵션을 사용하여 어셈블리를 GAC에 설치하고 있습니까? –

+0

예, gacutil을 사용하여 GAC에 어셈블리를 설치하는 데 동일한 옵션을 사용하고 있습니다. – Learner

관련 문제