通过反射,确定是否从GAC加载了引用的程序集

时间:2013-11-29 18:54:43

标签: c# reflection .net-assembly

我正在尝试找到一种方法来确定在GAC中安装了哪些程序集,哪些程序集是直接引用的,因此最有可能在程序集的引用程序集中复制本地(从Assembly.GetReferencedAssemblies()返回的结果) 。我唯一的出发点来自GetReferencedAssemblies()。

换句话说,如果myAssembly.GetReferencedAssemblies()返回System.Windows.Forms和MyNamespace.MyOtherAssembly,则可能从GAC和MyNamespace引用了System.Windows.Forms.MyOtherAssembly可能直接从dll引用并复制到本地。但我如何确定?

P.S。代码可能没有在最初创建程序集的计算机上运行,​​因此当在不同的计算机上编译原始程序集时,GAC中的引用程序集现在可能不存在。

1 个答案:

答案 0 :(得分:1)

这是问题How to identify if a GAC assembly is loading的副本。它提供the answer you seekbool属性Assembly.GlobalAssemblyCache表示程序集是否已从GAC加载:

using System.Linq;
string[] assemblies = AppDomain
                     .CurrentDomain
                     .GetAssemblies()
                     .Where(a => a.FullName.Contains("MVC"))
                     .Select(a => String.Format(
                        CultureInfo.InvariantCulture,
                        "[{0}] {1}",
                        a.GlobalAssemblyCache,
                        a.FullName
                        ))
                     .ToArray()
                     ;

File.WriteAllLines("c:\\assembliesdump.txt", items .ToArray());