我正在维护我们的应用程序的构建过程,该过程由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中注册程序集的想法。部署/升级应用程序时太麻烦了。
在没有指定每个必需组件的路径的情况下,还有另外一个吗?
答案 0 :(得分:2)
你的方法会调用最糟糕的DLL Hell。更新“库”程序集可能会破坏所有未经测试的应用程序,无法通过让它们使用旧版本的程序集来修复它们。这就是CLR不支持这种情况的原因。
您列出了所有常用的解决方法。除了一个:给每个应用程序自己的副本。
答案 1 :(得分:0)
我过去使用过AppDomain.AssemblyResolve方法,效果很好。我建议尝试找出哪个程序集导致FileNotFound异常,看看你是否可以重新组织应用程序初始化,以便它不会加载它。