Инструмент сравнения GAC для нескольких серверов?
Кто-нибудь знает инструмент, который позволил бы мне создать отчет о сборках, установленных в.NET GAC на всех серверах в моей веб-ферме? (30-40 серверов)
Или в качестве альтернативы, есть ли у кого-нибудь указатель или ссылка на какой-либо способ доступа к информации программным путем, через WMI, или запрос удаленного реестра, или какую-либо другую технологию?
2 ответа
Спасибо Крагену за подсказку, что под покровом представления GAC Explorer существуют файлы, которые я могу запросить в пространстве имен System.IO. К счастью, у меня есть сетевой доступ к каждому серверу.
Мне просто нужно было для одной сборки запросить версии, которые существовали в GAC на многих серверах. Несмотря на то, что этот отрывок далек от полного создания отчетов, он отлично послужил моим целям:
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);
}
}
}
}
}
Это можно вызвать один раз для каждого интересующего IP-адреса сервера и распечатать IP-адрес, имя DLL, версию сборки и FileVersion на консоль.
Не стесняйтесь использовать этот код и изменять его для своих собственных целей.
Вы можете отключить представление GAC по умолчанию, чтобы превратить его в обычное представление обозревателя в реестре, просто установите следующее значение в 1:
HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\
(Источник http://sqlmusings.wordpress.com/2007/11/17/how-to-disable-gac-view/)
Затем вы можете просто использовать какой-либо инструмент сравнения папок или просто определить, какие сборки присутствуют в именах папок.
К вашему сведению - это просто отключает представление обозревателя, однако другие точки взаимодействия с файловой системой (например, объект File в C# или командная строка) уже видят это представление, поэтому, вероятно, нет необходимости устанавливать этот ключ реестра для всех ваши серверы.