在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

最佳答案

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目录提供服务。

08-19 03:24