枚举GAC中的程序集

eff*_*kay 11 c# gac

如何在C#中枚举GAC中的所有可用程序集?

实际上我遇到了一个愚蠢的代码问题 - 名为Telerik.Web.UI.dll的程序集在项目中被引用和使用 - 这个特定的DLL不存在于BIN文件夹中.应用程序在服务器上工作正常 - 但在我的机器上,显然编译器出错.Ex-Developer坚持认为它不在服务器上的GAC中,而是"它就是这样".现在我需要检查这个DLL是否在GAC中注册.

帮助将不胜感激.

美好的一天;

Kev*_*Kev 10

如果您对服务器的访问权限有限,那么这可能有效:

// List of all the different types of GAC folders for both 32bit and 64bit
// environments.
List<string> gacFolders = new List<string>() { 
    "GAC", "GAC_32", "GAC_64", "GAC_MSIL", 
    "NativeImages_v2.0.50727_32", 
    "NativeImages_v2.0.50727_64",
    "NativeImages_v4.0.30319_32",
    "NativeImages_v4.0.30319_64"
};

foreach (string folder in gacFolders)
{
    string path = Path.Combine(
       Environment.ExpandEnvironmentVariables(@"%systemroot%\assembly"), 
       folder);

    if(Directory.Exists(path))
    {
        Response.Write("<hr/>" + folder + "<hr/>");

        string[] assemblyFolders = Directory.GetDirectories(path);
        foreach (string assemblyFolder in assemblyFolders)
        {
            Response.Write(assemblyFolder + "<br/>");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它基本上枚举了原始GAC文件夹.它适用于DiscountASP共享主机,因此可能适用于您的托管环境.

它可以通过枚举更深入到每个程序集的文件夹来修饰版本号和公钥令牌.


Mik*_*Two 5

你真的不需要用 C# 写一些东西来找出这个特定的 dll 是否在 gac 中。您可以在命令行中使用带有 /l 选项的gacutil.exe来列出 GAC 的内容。