我的ASP.NET应用程序中有一个"诊断"页面,它可以验证数据库连接,显示当前的appSettings和ConnectionStrings等.此页面的一部分显示了整个过程中使用的重要类型的程序集版本,但我无法弄清楚如何有效地显示所有已加载程序集的版本.
在.NET应用程序中找出所有当前引用和/或加载的程序集的最有效方法是什么?
注意:我对基于文件的方法不感兴趣,比如在特定目录中迭代*.dll.我对应用程序实际使用的内容感兴趣.
我需要一个方法,它接受一个Type并返回该类型中使用的所有程序集的路径.我写了这个:
public static IEnumerable<string> GetReferencesAssembliesPaths(this Type type)
{
yield return type.Assembly.Location;
foreach (AssemblyName assemblyName in type.Assembly.GetReferencedAssemblies())
{
yield return Assembly.Load(assemblyName).Location;
}
}
Run Code Online (Sandbox Code Playgroud)
通常这种方法可以完成这项工作,但也有一些缺点:
我没有找到如何从类型本身获取引用的程序集/类型,所以我使用了type.Assembly.GetReferencedAssemblies()并获得了整个程序集的引用,而不仅仅是那些与类型相关的引用.
type.Assembly.GetReferencedAssemblies()返回AssemblyName,没有location/path/filepath属性.要获取location属性,我首先使用Assembly.Load()然后使用location属性.我不希望加载程序集获取它们的路径,因为它们没有必要使用,并且因为Assembly.Load()可能因FileNotFoundException或BadImageFormatException而失败.