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.
Merci pour cela - J'ai passé un temps horrible à synchroniser mes serveurs Web, ce qui m'aidera bien! – SqlRyan