IIS查找MVC配置文件的错误路径

时间:2012-12-10 21:16:56

标签: nhibernate iis config andromda

当我使用Visual Studio Development Server运行MVC4我的应用程序时,我的应用程序能够正确加载所有配置文件。但是当我尝试在本地IIS Web服务器下运行它时,它会抛出此错误

{"Could not find a part of the path 'C:\\Windows\\SysWOW64\\inetsrv\\~\\nhibernate.config'."}

正在查看错误的文件夹。配置文件直接位于我的Web项目的根目录中。为什么会这样呢?我该如何解决呢?我很确定nhibernate会查找此文件以加载它的属性。除非你知道如何将nhibernate配置文件移动到web.config文件中,否则我不建议这样做,当我复制它时,我会得到一个“无法识别的配置部分hibernate-configuration”

编辑: 顺便说一下,我很确定它正在appSettings我的应用程序设置部分中查看以下键

<add key="nhibernate.config" value="~/nhibernate.config" />

EDIT2: 这里是堆栈跟踪,它描述了Nhibernate如何获取此值,并尝试查找配置文件

at NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader, Boolean fromAppSetting)
at NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader)
at NHibernate.Cfg.Configuration.Configure(XmlReader textReader)
at NHibernate.Cfg.Configuration.Configure(String fileName, Boolean ignoreSessionFactoryConfig)
at NHibernate.Cfg.Configuration.Configure(String fileName)
at AndroMDA.NHibernateSupport.DefaultSessionManager.BuildSessionFactory()

1 个答案:

答案 0 :(得分:0)

所以实际上并不是NHibernate使用这个文件。我的老板决定使用一种名为AndroMDA的东西来生成代码,而那一代的一部分是一些我无法看到的NHibernate支持。

如果有人感兴趣,我创建了一个新的ISessionManager实现,它看起来与DefaultSessionManager完全相同,除了以下成员函数和变量。

public class ServerMapSessionManager : ISessionManager
{
    //other interface implementation...//
    public static HttpServerUtility Server { get; set; }
    public String TranslateConfigPath(String virtualPath)
    {
        return Server.MapPath("/"+virtualPath);
    }
}

然后在App_start中我调用以下

        SessionManagerFactory.SessionManager = new MVCFramework.Core.Common.ServerMapSessionManager();
        MVCFramework.Core.Common.ServerMapSessionManager.Server = Server;