我想知道这样的设置是否可能:
c: flowproxy.dll(应用程序加载的主DLL)c: flowapplicationdynamic.dll (DLL由proxy.dll动态加载)c: flowdependency.dll (dynamic.dll需要的依赖DLL)
基本上,我想动态加载一个DLL(实例化类等),但有DLL的依赖关系存储在不同的位置。
这可能吗?我不想在每个子目录下都有这些依赖dll的副本…(我不能在GAC中加载它们,因为它们没有签名,它们是第三方dll)
你可以这样做。
通过处理AppDomain。事件,你可以从任何你喜欢的地方加载依赖程序集。如果您的应用程序知道依赖程序集可能位于另一个目录中,那么它可以处理此事件(这自动暗示它们没有在应用程序目录中找到,因为. net框架首先查找那里),并尝试从备用位置加载程序集。
有关详细信息,请参见解析程序集负载。
Update:在这种情况下,我相信您可以将给定的目录添加到AppDomainSetup中。PrivateBinPath属性用于指定应用域。只有当给定的目录是应用程序基目录的子目录时,这才会起作用。如果不是这种情况,那么要使用这种方法,您需要创建一个带有合适的应用程序基目录的新AppDomain。
另请参见程序集加载的最佳实践