【问题标题】:.NET assembly loading problem.NET 程序集加载问题
【发布时间】:2010-03-26 18:36:27
【问题描述】:

我正在维护我们的应用程序的构建过程,其中包括一个 ASP.Net 应用程序、两个不同的 Win32 服务和其他与系统管理员相关的应用程序。

我希望在调试和部署时都使用以下配置。

libraires/    -- Contains shared assemblies used by all other apps.
web/          -- ASP.Net site
service1/     -- Win32 service 1 (seen under the service control manager)
service2/     -- Win32 service 2 
adminstuff/   -- Sysadmin / support stuff used for troubleshooting

问题是 app.config 中的程序集探测 privatePath 不支持应用程序根目录之外的相对目录。即:不能使用 ../libraries。很郁闷...

如果我为我们的程序集命名,我可以使用似乎支持绝对路径但您需要单独指定每个程序集的 codeBase 配置元素。

我还尝试挂接到 AppDomain.AssemblyResolve 事件,但在我什至可以在 Main() 中注册事件处理程序之前,我就从 .Net Fusion 获得了 FileNotFoundException。

我不喜欢在 GAC 中注册程序集的想法。部署/升级应用时太麻烦了。

在没有指定每个所需程序集的路径的情况下,是否还有其他方法可以做到这一点?

【问题讨论】:

    标签: .net assemblies assembly-resolution fusion


    【解决方案1】:

    您的方法调用了最糟糕的 DLL 地狱。更新“库”程序集可能会破坏所有未经测试的应用程序,无法通过让它们使用旧版本的程序集来修复它们。这就是 CLR 不支持这种情况的原因。

    您已经列出了所有常见的解决方法。除了一个:给每个应用一个自己的副本。

    【讨论】:

      【解决方案2】:

      我过去曾使用过 AppDomain.AssemblyResolve 方法,并且效果很好。我建议尝试找出导致 FileNotFound 异常的 Assembly 是否可以重新组织应用程序初始化,使其在加载时不会加载。

      【讨论】:

        猜你喜欢
        • 2011-09-18
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 2012-10-15
        • 1970-01-01
        • 2011-05-11
        相关资源
        最近更新 更多