.NET程序集加载问题

时间:2010-03-26 18:36:27

标签: .net assemblies assembly-resolution fusion

我正在维护我们的应用程序的构建过程,该过程由ASP.Net应用程序,两个不同的Win32服务和其他与sysadmin相关的应用程序组成。

我希望最终得到以下配置,以便在调试时使用。展开。

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事件,但是我甚至可以从.Net Fusion获取FileNotFoundException,然后我甚至可以在Main()中注册事件处理程序。

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

在没有指定每个必需组件的路径的情况下,还有另外一个吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我过去使用过AppDomain.AssemblyResolve方法,效果很好。我建议尝试找出哪个程序集导致FileNotFound异常,看看你是否可以重新组织应用程序初始化,以便它不会加载它。