当我使用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()
答案 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;