【问题标题】:Can I specify dependency directories when dynamically loading assemblies?动态加载程序集时可以指定依赖目录吗?
【发布时间】:2011-10-12 12:46:46
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    是的,你可以这样做。

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

    更多详情请见Resolving Assembly Loads

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

    另见Best Practices for Assembly Loading

    【讨论】:

    • 这一定是 SmartAssembly 之类的工具在“嵌入”程序集时的表现...酷 :-)
    • @Yahia 是的 - 没有什么说您需要从文件加载程序集,您可以从嵌入式资源加载它,甚至尝试从另一个位置完全下载程序集。
    猜你喜欢
    • 2014-07-08
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多