我有一个第三方库,当我调用他们的代码时需要加载程序集 A。该程序集通常安装在 GAC 中,因此我有几个加载它的选项:
- 我可以显式调用
Assembly.Load()
。但是,这需要全名,我不愿意在我的程序中进行硬编码。 - 我可以显式调用
Assembly.LoadWithPartialName()
。那当然是一个过时的 API,当然我不愿意失去对版本控制的控制。 - 我可以在我的 Visual Studio 项目文件中引用该程序集,因此我始终可以获得我构建时所针对的版本。但是,除非我在该程序集中创建一个虚拟对象,否则这将不起作用。如果我不这样做,C# 编译器会简单地忽略它。
- 同样的问题,如果我调用
Assembly.GetReferencedAssemblies
并强制加载匹配的。即使我将它放入引用列表中,C# 编译器也不会引用我的程序集。
现在我正在做的是调用 typeof(A.Foo).Assembly.GetName()
并忽略返回值。有更好的方法吗?
最佳答案
对我来说,选项 1 是在 VS 项目中引用它。
但如果您想要一种更被动的方法,您可以使用 AppDomain.CurrentDomain.AssemblyResolve 事件处理程序。当需要一个在 AppDomain 中找不到的程序集时,它就会执行。事件参数将告诉您正在寻找的程序集,您可以在此时使用 Assembly.Load() 获取它
关于c# - 我应该如何强制加载引用的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604536/