NancyFX немедленно отражает изменения статического содержимого

В ASP.NET, когда я запускаю свой сервер в режиме отладки из VS2012, любые изменения, которые я делаю для статического содержимого (js, css и т.д.), отражаются сразу после сохранения.

В NancyFX мне нужно перезапустить свой сервер каждый раз, когда я вношу изменения в статический контент. Я предполагаю, что это потому, что VS необходимо скопировать статическое содержимое в выходной каталог каждый раз, когда я запускаю сервер.

Есть ли способ отразить изменения, сделанные в статическом содержимом, сразу после сохранения?

Здесь моя конфигурация для статического содержимого

public class MainBootstrapper : DefaultNancyBootstrapper
{
    protected override void ConfigureConventions(NancyConventions nancyConventions)
    {
        nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Scripts"));
        base.ConfigureConventions(nancyConventions);
    }
}

Это, вероятно, тоже. Я запускаю это под консольным приложением с основным циклом nancyfx, написанным следующим образом:

class Program
{
    const ushort port = 64402;
    const string escapeString = "/Terminate";

    static void Main(string[] args)
    {
        NancyHost host;

        #region Making new instance of NancyHost
        var uri = new Uri("http://localhost:" + port + "/");
        var config = new HostConfiguration(); config.UrlReservations.CreateAutomatically = true;

        host = new NancyHost(config, uri);
        #endregion
        #region NancyFX hosting loop
        try
        {
            host.Start();

            Console.Write("Start hosting the Fate/Another ranking system frontend\n" +
                "\t\"" + uri + "\"\n" +
                "To stop the hosting, input \"" + escapeString + "\".\n\n");
            do Console.Write("> "); while (Console.ReadLine() != escapeString) ;
        }
        catch (Exception e)
        {
            Console.WriteLine("Unhandled exception has been occured!\n"
                + e.Message);
            Console.ReadKey(true);
        }
        finally
        {
            host.Stop();
        }

        Console.WriteLine("Goodbye");
        #endregion
    }
}

Это будет работать под ubuntu w/nginx, если вам интересно, почему я не использую Nancy.ASPNET.hosting

Ответ 1

Корневой путь по умолчанию Nancy - это папка bin вашего приложения. Если вы хотите, чтобы обновления в ваших активах отражались после обновления без необходимости пересортировки, вы можете использовать пользовательский Nancy.IRootPathProvider, вы можете сделать что-то вроде следующего:

public class NancyCustomRootPathProvider : IRootPathProvider
{
    public string GetRootPath()
    {
#if DEBUG
        return Directory.GetParent(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).FullName;
#else
        return Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
#endif
    }
}

Это также позволяет создавать производственные сборки непосредственно из своего каталога bin, как это может быть в случае развертывания приложения.

Ответ 2

Это из-за того, что ваш сайт выполняется из вашего каталога bin \, и ваш статический контент выполняется из этой папки и копируется там, когда вы компилируете - поэтому, когда вы обновляете статический контент во время его работы, это ваша исходная папка, обновляется, а не в папке bin\

Ответ 3

Не уверен, что такое ваша точная настройка, но нет проблемы с обновлением представлений или статического контента и немедленным отражением изменений. Я просто попробовал его локально (используя 0.20.0) с хостом Nancy.Hosting.Aspnet, и он работал нормально

Ответ 4

Вы уверены, что ваши файлы изменений сохраняются при запуске сервера?

IISExpress (для меня, а не для других) сохраняет блокировку всех файлов вида во время работы. Это означает, что мне нужно перезапустить IISExpress, чтобы сохранить изменения.

Возможно, что-то подобное происходит с вами?

Ответ 5

Вы можете установить расположение представления, как описано в https://github.com/NancyFx/Nancy/wiki/View-location-conventions, в расположение пути источника решения. Получите местоположение из переменной app.config, чтобы вы могли переключаться в зависимости от среды (debug/production), в которой вы работаете. Тогда nancy будет загружать просмотры, которые вы сохраняете в своей среде IDE. Не забудьте установить StaticConfiguration.Caching.EnableRuntimeViewUpdates = true;, чтобы все изменения были подняты при обновлении страницы.