Инструмент сравнения 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# или командная строка) уже видят это представление, поэтому, вероятно, нет необходимости устанавливать этот ключ реестра для всех ваши серверы.

Другие вопросы по тегам