NancyFX立即反映静态内容的变化

时间:2013-09-15 16:19:49

标签: c# asp.net .net visual-studio-2012 nancy

在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
    }
}

如果您想知道我为什么不使用Nancy.ASPNET.hosting,这将在ubuntu w / nginx下运行

5 个答案:

答案 0 :(得分:7)

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目录提供,就像部署应用程序时的情况一样。

答案 1 :(得分:4)

是因为您的站点正在执行bin \目录,并且您的静态内容是从该文件夹中提供的,并在编译时复制到那里 - 所以当您在运行时更新静态内容时,它是您的源文件夹得到更新,而不是在你的bin \文件夹?

答案 2 :(得分:3)

不确定您的确切设置是什么,但更新视图或静态内容并立即反映更改没有问题。我只是在本地(使用0.20.0)和Nancy.Hosting.Aspnet主机一起尝试了它并且工作正常

答案 3 :(得分:2)

您确定在服务器运行时是否保存了更改文件吗?

IISExpress(对我而言,对我而言)在所有视图文件运行时都会锁定它。这意味着我需要重新启动IISExpress才能保存任何更改。

也许有类似事情发生在你身上?

答案 4 :(得分:2)

您可以按照https://github.com/NancyFx/Nancy/wiki/View-location-conventions中的说明将视图位置设置为解决方案源路径的位置。从app.config变量获取位置,以便根据您运行的环境(调试/生产)进行切换。然后nancy将拾取您在IDE中保存的视图。 不要忘记设置StaticConfiguration.Caching.EnableRuntimeViewUpdates = true;,以便在刷新页面时获取所有更改。