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

Tod*_* Li 7 .net c#

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

  1. 我可以明确地打电话Assembly.Load().然而,这需要全名,我觉得我的程序中的硬编码不舒服.
  2. 我可以明确地打电话Assembly.LoadWithPartialName().那当然是一个过时的API,当然我在版本控制中失去控制感觉不舒服.
  3. 我可以在我的Visual Studio项目文件中引用程序集,所以我总是得到我构建的版本.但是,除非我在该程序集中创建一个虚拟对象,否则这将无效.如果不这样做,C#编译器就会忽略它.
  4. 如果我调用Assembly.GetReferencedAssemblies并强制加载匹配的问题,同样的问题.即使我把它放在引用列表中,C#编译器也不会引用我的程序集.

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

Gle*_*rie 1

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

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