如何从指定位置加载引用的dll而不是GAC?

时间:2010-08-13 03:04:38

标签: .net

我有一个名为A.dll的dll,名字很强,另一个程序集B引用A.dll。我将A.dll放在c:\ myapp中,同时A.dll安装在GAC中。 我希望程序集B从c:\ myapp加载A.dll而不是GAC。但它始终从GAC加载A.dll。我的问题是如何从指定的本地位置而不是GAC加载引用的dll。 感谢。

4 个答案:

答案 0 :(得分:3)

根据MSDN page about how the CLR loads assemblies,CLR将在尝试从工作目录加载程序集之前从GAC加载程序集。似乎没有办法解决这个问题。

或者,您可以不将程序集添加到GAC,以便强制CLR按probing查找程序集。

答案 1 :(得分:2)

你必须给它一个不同的[AssemblyVersion]。最终有意义的是,如果版本号相同,则没有理由认为GAC版本不会很好。

答案 2 :(得分:0)

唯一的方法是使用Assembly.LoadFile()加载程序集。这允许您指定要加载的路径。

有几个陷阱让这非常痛苦:

  • 在自动加载程序集之前,您必须执行Assembly.LoadFile()
  • 没有自动加载A.dll的依赖项,您必须手动加载所有这些项
  • A.dll将加载到LoadFrom上下文中(有关详细信息,请参阅msdn),这实际上意味着任何引用A.dll的代码都不能只使用来自A的类型。 dll,你必须使用反射

答案 3 :(得分:0)

可以通过托管CLR并实现IHostAssemblyManager和IHostAssemblyStore来实现。这就像使用火箭筒杀死蚊子一样。