我正在尝试找到一种方法来确定在GAC中安装了哪些程序集,哪些程序集是直接引用的,因此最有可能在程序集的引用程序集中复制本地(从Assembly.GetReferencedAssemblies()返回的结果) 。我唯一的出发点来自GetReferencedAssemblies()。
换句话说,如果myAssembly.GetReferencedAssemblies()返回System.Windows.Forms和MyNamespace.MyOtherAssembly,则可能从GAC和MyNamespace引用了System.Windows.Forms.MyOtherAssembly可能直接从dll引用并复制到本地。但我如何确定?
P.S。代码可能没有在最初创建程序集的计算机上运行,因此当在不同的计算机上编译原始程序集时,GAC中的引用程序集现在可能不存在。
答案 0 :(得分:1)
这是问题How to identify if a GAC assembly is loading的副本。它提供the answer you seek。 bool
属性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());