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;
Другие вопросы по тегам