C# NancyFX立即反映静态内容的更改
在ASP.NET中,每当我从VS2012开始以调试模式运行服务器时,我对静态内容(js、css等)所做的任何更改都会在保存后立即反映出来 在NancyFX中,每次更改静态内容时,我都需要重新启动服务器。我假设这是因为每次运行服务器时VS都需要将静态内容复制到输出目录 保存后是否立即反映对静态内容所做的更改 下面是我对静态内容的配置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
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主机中解救出来!