动态加载程序集时可以指定依赖项目录吗?

时间:2011-07-25 11:41:00

标签: .net assemblies dependencies dependency-management dynamic-assemblies

我想知道这样的设置是否可行:

c:\ eflow \ proxy.dll(应用程序加载的主DLL) c:\ eflow \ application \ dynamic.dll(由proxy.dll动态加载的DLL) c:\ eflow \ dependency.dll(dynamic.dll所需的依赖DLL)

基本上,我想动态加载DLL(实例化类等),但将DLL的依赖项存储在不同的位置。

这可能吗?我不希望在每个子目录中都有这些依赖DLL的副本...(我无法在GAC中加载它们,因为它们没有签名,它们是第三方DLL)

1 个答案:

答案 0 :(得分:3)

是的,你可以这样做。

通过处理AppDomain.AssemblyResolve Event,您可以从任何地方加载相关的程序集。如果您的应用程序知道依赖程序集可能位于另一个目录中,那么它可以处理此事件(这自动意味着它们在applciation目录中找不到,因为.Net框架首先在那里查找),并尝试从该目录加载程序集备用位置。

有关详细信息,请参阅Resolving Assembly Loads

更新:在这种情况下,我相信您可以将给定目录添加到所需应用域的AppDomainSetup.PrivateBinPath Property。这仅在给定目录是应用程序基目录的子目录时才有效。如果不是这种情况,那么要使用这种方法,您需要创建一个具有合适应用程序基目录的新AppDomain。

另见Best Practices for Assembly Loading