C# NancyFX立即反映静态内容的更改

C# NancyFX立即反映静态内容的更改,c#,asp.net,.net,visual-studio-2012,nancy,C#,Asp.net,.net,Visual Studio 2012,Nancy,在ASP.NET中,每当我从VS2012开始以调试模式运行服务器时,我对静态内容(js、css等)所做的任何更改都会在保存后立即反映出来 在NancyFX中,每次更改静态内容时,我都需要重新启动服务器。我假设这是因为每次运行服务器时VS都需要将静态内容复制到输出目录 保存后是否立即反映对静态内容所做的更改 下面是我对静态内容的配置 public class MainBootstrapper : DefaultNancyBootstrapper { protected override v

在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.Hosting.Aspnet主机在本地(使用0.20.0)试用过,效果很好

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

IISExpress(对于我,而不是其他人)在运行时锁定所有视图文件。这意味着我需要重新启动IISExpress以保存任何更改


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

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

您可以将中所述的视图位置设置为解决方案源路径的位置。从app.config变量获取位置,以便您可以根据正在运行的环境(调试/生产)进行切换。然后nancy将获取保存在IDE中的视图。
不要忘记设置
StaticConfiguration.Caching.EnableRuntimeViewUpdates=true以便在页面刷新时获取所有更改。

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
目录提供服务,这可能是部署应用程序时的情况。

我也使用0.20.0,但我使用的是Nancy.Hosting.Self。这有关系吗?是的,这似乎是问题所在。对于IIS,从源代码更新我的内容会立即反映更改,因此我假设IIS会自动将更改的源内容复制到bin\。我想知道Nancy.Self.Hosting是否有类似的功能。它在IISExpress下运行良好。它不起作用的地方是自我托管。以防万一,我检查了文件是否被锁定,但是没有。谢谢!EnableRuntimeViewUpdates正是我想要的。将我从移动到Owin/ASP主机中解救出来!