c# - 我应该如何强制加载引用的程序集?

标签 c# .net

我有一个第三方库,当我调用他们的代码时需要加载程序集 A。该程序集通常安装在 GAC 中,因此我有几个加载它的选项:

  1. 我可以显式调用 Assembly.Load()。但是,这需要全名,我不愿意在我的程序中进行硬编码。
  2. 我可以显式调用 Assembly.LoadWithPartialName()。那当然是一个过时的 API,当然我不愿意失去对版本控制的控制。
  3. 我可以在我的 Visual Studio 项目文件中引用该程序集,因此我始终可以获得我构建时所针对的版本。但是,除非我在该程序集中创建一个虚拟对象,否则这将不起作用。如果我不这样做,C# 编译器会简单地忽略它。
  4. 同样的问题,如果我调用 Assembly.GetReferencedAssemblies 并强制加载匹配的。即使我将它放入引用列表中,C# 编译器也不会引用我的程序集。

现在我正在做的是调用 typeof(A.Foo).Assembly.GetName() 并忽略返回值。有更好的方法吗?

最佳答案

对我来说,选项 1 是在 VS 项目中引用它。

但如果您想要一种更被动的方法,您可以使用 AppDomain.CurrentDomain.AssemblyResolve 事件处理程序。当需要一个在 AppDomain 中找不到的程序集时,它就会执行。事件参数将告诉您正在寻找的程序集,您可以在此时使用 Assembly.Load() 获取它

关于c# - 我应该如何强制加载引用的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604536/

相关文章:

c# - 旧 PC 无法运行 XNA,对于创建简单的 2D 游戏有什么建议?

c# - 如何使用带参数的非泛型基类声明泛型类的构造函数

c# - 如何使统一对象的颜色100%不透明

c# - 如何在 WPF 中检索 DataGrid 内容的总高度?

c# - 鼠标倾斜水平滚动在 DataGridView 中不起作用

c# - 自定义 .NET 远程处理 IServerChannelSink

c# - 我如何解决 "Please make sure that the file is accessible and that it is a valid assembly or COM component"?

c# - 实现接口(interface)的类型的 Entity Framework DBSet 扩展

.net - 如何为 Entity Framework 创建三层解决方案

c# - 如何将可选指针参数从 C++ 代码转换为 C#