DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 327420 - Dernière mise à jour: mercredi 24 août 2005 - Version: 1.1

 

Sommaire

Symptômes

Vous avez deux versions d'un assembly nommé MyAssembly. MyAssembly contient une classe qui est appelée MaClasse, et vous charger MyClass à partir de la version 1.0.0.0 de MyAssembly en appelant GetType() . Ensuite, si vous essayez de charger MyClass de MyAssembly version 2.0.0.0 en appelant GetTypeFromCLSID() ou GetType() , le type qui est renvoyé à partir de cet appel est le type de version 1.0.0.0 MyAssembly.

Statut

Microsoft a confirmé qu'il s'agit un bogue dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Procédure pour reproduire le comportement

  1. Utiliser le code suivant pour créer un fichier nommé MyAssembly.cs pour la version 1 et l'enregistrer dans un répertoire nommé v1 :
    // MyAssembly.cs code for assembly version 1 
    using	System;
    using 	System.Reflection;
    using 	System.Runtime.InteropServices;
    
    [assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyKeyFile("vtest.snk")]
    
    
    [Guid("BAF27F93-D60D-4092-815E-F5382C9FBBB4")]
    public class MyClass
    {
    	public string HelloWorld() { return "Hello, World: From V1"; }
    }
    					
  2. Utiliser le code suivant pour créer un fichier nommé MyAssembly.cs pour la version 2 et l'enregistrer dans un répertoire nommé v2 :
    // MyAssembly.cs code for assembly version 2
    using	System;
    using 	System.Reflection;
    using 	System.Runtime.InteropServices;
    
    [assembly: AssemblyVersion("2.0.0.0")]
    [assembly: AssemblyKeyFile("vtest.snk")]
    
    
    [Guid("BAF27F93-D60D-4092-815E-F5382C9FBBB4")]
    public class MyClass
    {
    	public string HelloWorld() { return "Hello, World: From V2"; }
    }
    					
  3. Créer Vtest.snk avec l'outil Tool Sn.exe :
    // Test client
    using System;
    
    class Test
    {
    	static void Main(string[] args)
    	{
    		Console.WriteLine("Main");
    		Type t1 = Type.GetType("MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fadf9433ffb9570a");
    		Console.WriteLine("GetType()          : " + t1.AssemblyQualifiedName);
    		
    		Type t2 = Type.GetTypeFromCLSID(new Guid("BAF27F93-D60D-4092-815E-F5382C9FBBB4"));
    		Console.WriteLine("GetTypeFromCLSID() : " + t2.AssemblyQualifiedName);
    
    	}	
    }
    					
  4. Enregistrer une copie de Vtest.snk dans les répertoires le v1 et v2 :
    sn.exe -k vtest.snk
    					
  5. Dans les répertoires respectifs, compiler les MyAssembly.cs fichiers dans la DLL.
  6. Utilisez gacutil-i pour ajouter les deux versions de MyAssembly.dll dans le cas.
  7. Exécutez Regasm.exe sur la version 2 de MyAssembly.dll.
  8. Enregistrer Test.cs dans n'importe quel répertoire que vous souhaitez.
  9. Exécutez la suivante sur une ligne de commande pour rechercher le jeton de clé publique MyAssembly.dll :
    gacutil.exe -l MyAssembly
    					
  10. Modifier la ligne suivante dans Test.cs pour inclure le jeton de clé publique correcte :
    Type t1 = Type.GetType("MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=<insert your PublicKeyToken>");
    					
  11. Enregistrer les modifications.
  12. Compiler Test.cs dans un fichier .exe.
  13. Exécutez test.exe. La sortie qui est générée est similaire à celui-ci :
    GetType()          : MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fadf9433ffb9570a
    GetTypeFromCLSID() : MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fadf9433ffb9570a
    					
    avertissement que les deux lignes spécifient version 1.0.0.0.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Studio .NET 2002 Professional Edition
Mots-clés : 
kbmt kbvs2002sp1sweep kbbug KB327420 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 327420  (http://support.microsoft.com/kb/327420/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store