c# - 获取 Type 中使用的程序集的路径

标签 c# .net reflection assemblies reference

我需要一个方法,它接受一个类型并返回该类型中使用的所有程序集的路径。 我写了这个:

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;
 }
}

通常这种方法可以完成工作,但有一些缺点:

  • 我没有找到如何从类型本身获取引用的程序集/类型,所以我使用了 type.Assembly.GetReferencedAssemblies() 并获取了整个程序集的引用,而不仅仅是那些与类型。

  • type.Assembly.GetReferencedAssemblies() 返回 AssemblyName 并且没有位置/路径/文件路径属性。为了获取位置属性,我首先使用了 Assembly.Load(),然后使用了位置属性。我不希望加载程序集获取它们的路径,因为它们没有必要使用,并且因为 Assembly.Load() 可能因 FileNotFoundException 或 BadImageFormatException 而失败。

最佳答案

我想我通过将它替换为 Assembly.ReflectionOnlyLoad() 解决了 Assembly.Load() 问题。

现在我的方法是这样的:

public static IEnumerable<string> GetReferencesAssembliesPaths(this Type type)
{           
    yield return type.Assembly.Location;

    foreach (AssemblyName assemblyName in type.Assembly.GetReferencedAssemblies())
    {
        yield return Assembly.ReflectionOnlyLoad(assemblyName.FullName).Location;
    }
}

现在唯一剩下的问题是 type.Assembly.GetReferencedAssemblies(),如何从类型而不是从程序集获取引用的程序集?

关于c# - 获取 Type 中使用的程序集的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582510/

相关文章:

c# - 为什么 ReSharper 提供带有字符串插值的奇怪格式?

c# - Visual C# WPF,自定义统一网格组件

c# - 调用从 C# 获取指针的 C++ 函数

.net - Keyboard.Focus(item) 和 item.Focus() 有什么区别?

Java 7 和反射 - 它会 self 优化吗?

c# - 输出未正确写入 CSV

c# - 如何确定 USB 端口的速度?

c# - 如何将 Linq 扩展方法重写为委托(delegate)?

java - 返回枚举作为对象类型

java - 如何将自定义字段的注入(inject)添加到 FXMLLoader 的默认 ControllerFactory 中?