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