Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 多服务器的GAC比较工具?_.net_Gac_Remote Administration - Fatal编程技术网

.net 多服务器的GAC比较工具?

.net 多服务器的GAC比较工具?,.net,gac,remote-administration,.net,Gac,Remote Administration,是否有人知道有一种工具可以让我生成web场中所有服务器上安装到.NET GAC的程序集的报告?30-40台服务器 或者,是否有人在通过WMI、远程注册表查询或其他技术以编程方式访问信息时有指针或链接?您可以禁用默认GAC视图,将其转换为注册表中的普通资源管理器视图,只需将以下值设为1: HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\ 来源 然后,您可以使用一些文件夹比较工具,或者从文件夹名称中计算出存在哪些程序集 仅供参考-这只是关闭了explore

是否有人知道有一种工具可以让我生成web场中所有服务器上安装到.NET GAC的程序集的报告?30-40台服务器


或者,是否有人在通过WMI、远程注册表查询或其他技术以编程方式访问信息时有指针或链接?

您可以禁用默认GAC视图,将其转换为注册表中的普通资源管理器视图,只需将以下值设为1:

HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\
来源

然后,您可以使用一些文件夹比较工具,或者从文件夹名称中计算出存在哪些程序集


仅供参考-这只是关闭了explorer视图,但是与文件系统的其他交互点(例如C中的文件对象)或命令提示符已看到此视图,因此,可能不需要在所有服务器上设置此注册表项。

您可以禁用默认GAC视图,将其转换为注册表中的普通浏览器视图,只需将以下值设置为1:

HKEY_LOCAL_MACHINE\Software\Microsoft\Fusion\
来源

然后,您可以使用一些文件夹比较工具,或者从文件夹名称中计算出存在哪些程序集


仅供参考-这只是关闭了explorer视图,但是与文件系统的其他交互点(例如C中的文件对象)或命令提示符已经看到了此视图,因此可能不需要在所有服务器上设置此注册表项。

感谢Kragen在explorer的GAC视图的外表下暗示,存在可以使用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名称、程序集版本和文件版本打印到控制台


请随意使用此代码并根据自己的目的进行修改。

感谢Kragen,因为他暗示在Explorer的GAC视图的外表下,存在着我可以使用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名称、程序集版本和文件版本打印到控制台


请随意使用此代码并为您自己的目的进行修改。

谢谢您的帮助-我一直在经历一段可怕的时间,让我的web服务器彼此保持同步,这将非常有帮助!谢谢你-我一直在经历一段可怕的时间来保持我的web服务器之间的同步,这将很有帮助!