2009-11-05 2 views
1

내 웹 팜의 모든 서버에서 .NET GAC에 설치된 어셈블리 보고서를 생성 할 수있는 도구를 아는 사람이 있습니까? (30-40 서버)여러 서버에 대한 GAC 비교 도구?

다른 방법으로 WMI, 원격 레지스트리 쿼리 또는 일부 다른 기술을 통해 프로그래밍 방식으로 정보에 액세스하는 포인터 나 링크가있는 사람이 있습니까?

+0

감사합니다. - 나는 서로 짝을 이루는 웹 서버를 유지하는 데 끔찍한 시간을 보내고 있습니다. 그리고 이것은 도움이 될 것입니다! – SqlRyan

답변

3

감사합니다. Kragen은 Explorer의 GAC보기의 베니어 밑에 System.IO 네임 스페이스로 쿼리 할 수있는 파일이 있음을 알았습니다. 다행히 각 서버에 대한 네트워크 액세스 권한이 있습니다.

단일 어셈블리의 경우 많은 서버의 GAC에있는 버전을 쿼리하기 만하면되었습니다. 이 관심의 각 서버 IP에 대해 한 번 호출 할 수 있습니다

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, DLL 이름, 조립 버전과의 FileVersion을 인쇄 : 지금까지 완전한보고 응용 프로그램에서 동안,이 조각은 내 목적을 멋지게 제공 .

이 코드를 마음대로 수정하십시오.

2

레지스트리에서 일반 탐색기보기로를 설정하는 기본 GAC보기를 비활성화 할 수 있습니다, 단지 1에 다음 값을 설정 :

HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\ 

(출처 http://sqlmusings.wordpress.com/2007/11/17/how-to-disable-gac-view/)

을 당신은 다음 수 일부 폴더 비교 도구를 사용하거나 폴더 이름에서 어떤 어셈블리가 있는지 확인하십시오.

FYI - 탐색기보기를 끄기 만하지만 파일 시스템과의 다른 상호 작용 지점 (예 : C#의 File 개체 또는 명령 프롬프트)에 이미이보기가 표시되어 있으므로이 레지스트리를 설정할 필요가 없습니다. 모든 서버에서 키를 누릅니다.