这里只是一些背景信息。我目前正在使用WinHost共享主机,并进行以下设置
Shared IIS
|______Main Primary MVC3 web app (uses NHibernate & Castle.Windsor for ORM)
|_______ Child MVC3 web app (not using NHibernate nor Castle.Windsor as it does not need database access)
在WinHost中,它允许我设置应用程序的起始点,所以我可以
/ <= for primary app
/child <= for the child app
每个应用都有自己的web.config,所以就像
/web.config
/child/web.config
嗯,令我惊讶的是,即使将/ child文件夹设置为应用程序起点,它似乎也不会与父主Web应用程序隔离,因为当我尝试加载子应用程序时,我得到了臭名昭着的错误
无法加载文件或程序集 'Castle.Windsor'或其中一个 依赖。系统找不到 指定的文件。
我尝试通过将NHibernate相关库转储到/ child / bin文件夹来解决这个问题,但这只会让事情变得更糟,因为我还需要在子应用程序中设置额外的NHibernate配置,即使子应用程序不需要数据库访问。
那么是否有某个设置(例如web.config)我可以强制将子应用程序与父应用程序隔离?
我认为最后的办法是放弃子网页应用,并将其转换为主要主网络应用下的“区域”,但这并不理想,因为这两个网络应用并不相互关联所有,针对不同的受众等。
注意:由于两个原因,它不应该是路由问题的情况 1. WinHost将/ child文件夹设置为应用程序起点 2.在主Web应用程序下,我已经忽略了RegisterRoutes()
中的子项routes.IgnoreRoute("child");
routes.IgnoreRoute("{folder}/{*pathinfo}", new { folder = "child" });
嗯,经过3个小时的工作,我很茫然。任何建议都非常感谢。如果您需要查看任何配置,请告诉我。提前谢谢!
答案 0 :(得分:1)
我最终通过将子应用修改为父应用下的区域来解决此问题。然后,我禁用了/ child文件夹的应用程序起始点,并从服务器中删除了/ child文件夹。
它现在正在运作,虽然我对解决方法并不十分兴奋。
答案 1 :(得分:1)
问题是.config继承。但您可以使用<location>
元素禁用它:
<location path="." inheritInChildApplications="false">
<system.web>
...
</system.web>
</location>
所以基本上你必须在配置中查找特定于父应用但未在子应用中使用的任何内容,并关闭它的继承。
以下是一篇包含更多信息的文章:http://www.colincochrane.com/post/2007/11/Disabling-Configuration-Inheritance-For-ASPNET-Child-Applications.aspx