2010-12-03 16 views
0

J'ai créé un projet de test pour comprendre la réflexion. Je charge un assembly à partir de .NET 4.0 GAC. (Si je comprends bien, .NET 4.0 maintient qu'il est GAC dans C: \ WINDOWS \ Microsoft.NET \ assembly)Assembly.GlobalAssemblyCache renvoyant FALSE bien que l'assembly soit chargé à partir de GAC

J'ai écrit le code comme ceci:

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); 

Quand je lance ce code, GlobalAssemblyCache propriété toujours return FALSE bien que je charge l'assembly à partir de GAC.

Quelqu'un peut-il me dire la raison? Ou est-ce que je manque quelque chose?

Répondre

1

Vous pouvez d'abord vous assurer que votre assembly est en fait chargé sur le GAC. Pour le faire, vous pouvez essayer ce qui suit:

gacutil /l System.Data 

qui fournirait les détails de l'ensemble dans le GAC comme:

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 

Ensuite, pour charger l'ensemble du GAC pour l'utilisation ReflectionOnly vous pouvez essayer le ReflectionOnlyLoad au lieu de ReflectionOnlyLoadFrom

exemple:

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"); 
} 

qui précède donne la sortie suivante:

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 

Hope that helps!

+0

Cela semble vraiment utile. Mais quand je lance gacutil/l TestReflection.dll, il est dit 0 assemblages trouvés. Mais quand je vais dans le dossier GAC de .NET 4.0, je peux voir des assemblages là. Une idée de ce qui pourrait être le problème? – Learner

+0

@Amey: Installez-vous votre assembly dans le GAC en utilisant l'option 'gacutil/i '? –

+0

Oui, j'utilise la même option pour installer l'assembly dans GAC en utilisant gacutil. – Learner