Инструмент сравнения GAC для нескольких серверов?

StackOverflow https://stackoverflow.com/questions/1681148

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top