2009-11-05 8 views
1

Est-ce que quelqu'un connaît un outil qui me permettrait de générer un rapport des assemblys installés sur le .NET GAC sur tous les serveurs de ma ferme Web? (30-40 serveurs)Outil de comparaison GAC pour plusieurs serveurs?

Ou bien, quelqu'un a-t-il un pointeur ou un lien sur un moyen d'accéder à l'information par programmation, via WMI, ou une requête de registre à distance, ou une autre technologie?

+0

Merci pour cela - J'ai passé un temps horrible à synchroniser mes serveurs Web, ce qui m'aidera bien! – SqlRyan

Répondre

3

Merci Kragen, pour avoir laissé entendre que sous le vernis de la vue GAC de l'explorateur, il existait des fichiers que je pouvais interroger avec l'espace de noms System.IO. Heureusement, j'ai un accès réseau à chaque serveur.

J'avais juste besoin, pour un seul assemblage, d'interroger les versions qui existaient dans le GAC sur de nombreux serveurs. Bien que loin d'être une application de reporting complet, cet extrait a servi mes objectifs bien:

private static void QueryServerGAC(string IP) 
{ 
    string rootPath = String.Format(@"\\{0}\C$\WINDOWS\Assembly", IP); 
    DirectoryInfo root = new DirectoryInfo(rootPath); 

    foreach (DirectoryInfo gacDir in root.GetDirectories("GAC*")) // GAC, GAC_32, GAC_MSIL 
    { 
     foreach (DirectoryInfo assemDir in gacDir.GetDirectories("MyAssemblyName")) 
     { 
      foreach (DirectoryInfo versionDir in assemDir.GetDirectories()) 
      { 
       string assemVersion = versionDir.Name.Substring(0, versionDir.Name.IndexOf('_')); 
       foreach (FileInfo fi in versionDir.GetFiles("*.dll")) 
       { 
        FileVersionInfo vi = FileVersionInfo.GetVersionInfo(fi.FullName); 
        Console.WriteLine("{0}\t{1}\t{2}\t{3}", IP, fi.Name, assemVersion, vi.FileVersion); 
       } 
      } 
     } 
    } 
} 

Cela peut être appelé une fois pour chaque serveur IP d'intérêt, et imprime l'adresse IP, le nom DLL, version Assemblée, et FileVersion à la console .

Sentez-vous libre de prendre ce code et de le modifier pour vos propres besoins.

2

Vous pouvez désactiver la vue par défaut GAC pour la transformer en une vue de l'explorateur normal dans le registre, vient de mettre la valeur suivante à 1:

HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\ 

(Source http://sqlmusings.wordpress.com/2007/11/17/how-to-disable-gac-view/)

Vous pouvez alors juste utiliser un outil de comparaison de dossiers, ou simplement déterminer quels assemblages sont présents dans les noms de dossiers. FYI - ceci éteint la vue de l'explorateur, cependant d'autres points d'interaction avec le système de fichiers (par exemple l'objet File en C#, ou l'invite de commande) voient déjà cette vue, donc il n'y a probablement pas besoin de définir ce registre clé sur tous vos serveurs.