0

我正在维护我们的应用程序的构建过程,其中包括一个 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 中注册程序集的想法。部署/升级应用程序时太麻烦了。

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

4

2 回答 2

2

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

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

于 2010-03-26T18:59:20.480 回答
0

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

于 2010-03-26T18:57:54.483 回答