IIS ищет неправильный путь для файла конфигурации MVC
Когда я запускаю MVC4 мое приложение, используя Visual Studio Development Server, мое приложение может корректно загрузить все файлы конфигурации. Но когда я пытаюсь запустить его под локальным веб-сервером IIS, он выдает эту ошибку
{"Could not find a part of the path 'C:\\Windows\\SysWOW64\\inetsrv\\~\\nhibernate.config'."}
Он смотрит не на ту папку. Конфигурационный файл находится прямо в корне моего веб-проекта. Почему это происходит. Как я могу это исправить. Я уверен, что 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 ответ
Так что на самом деле не 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;