Web ファーム内のすべてのサーバー上の .NET GAC にインストールされたアセンブリのレポートを生成できるツールを知っている人はいますか? (30~40台のサーバー)
または、WMI、リモート レジストリ クエリ、またはその他のテクノロジを介して、プログラムによって情報にアクセスする方法についてのポインタまたはリンクを誰かが持っていますか?
Web ファーム内のすべてのサーバー上の .NET GAC にインストールされたアセンブリのレポートを生成できるツールを知っている人はいますか? (30~40台のサーバー)
または、WMI、リモート レジストリ クエリ、またはその他のテクノロジを介して、プログラムによって情報にアクセスする方法についてのポインタまたはリンクを誰かが持っていますか?
Explorer の GAC ビューのベニヤの下に、System.IO 名前空間でクエリできるファイルが存在することをほのめかしてくれた Kragen に感謝します。幸いなことに、私は各サーバーにネットワーク アクセスできます。
単一のアセンブリについて、多くのサーバーの 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 ごとに 1 回呼び出すことができ、IP、DLL 名、アセンブリ バージョン、およびファイル バージョンをコンソールに出力します。
このコードを自由に使用して、独自の目的に合わせて変更してください。
次の値を 1 に設定するだけで、デフォルトの GAC ビューを無効にして、レジストリの通常のエクスプローラ ビューに切り替えることができます。
HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\
(ソースhttp://sqlmusings.wordpress.com/2007/11/17/how-to-disable-gac-view/ )
次に、フォルダー比較ツールを使用するか、フォルダー名からどのアセンブリが存在するかを調べることができます。
参考までに - これは単にエクスプローラー ビューをオフにしますが、ファイル システムとのやり取りの他のポイント (C# の File オブジェクトやコマンド プロンプトなど) では既にこのビューが表示されているため、すべてのサーバーでこのレジストリ キーを設定する必要はおそらくないでしょう。あなたのサーバー。