11

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 を使用しないのか疑問に思っている場合に備えて、nginx を使用した ubuntu で実行されます。

4

5 に答える 5

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これにより、アプリケーションをデプロイする場合のように、本番ビルドをディレクトリから直接提供することもできます。

于 2015-05-19T15:01:33.110 に答える
3

正確な設定が何であるかはわかりませんが、ビューまたは静的コンテンツを更新してすぐに変更を反映させることに問題はありません。Nancy.Hosting.Aspnet ホストを使用してローカルで (0.20.0 を使用して) 試してみたところ、問題なく動作しました。

于 2013-09-15T18:21:18.083 に答える
2

サーバーの実行中に変更ファイルが保存されていますか?

IISExpress (他の人ではなく私にとって) は、実行中にすべてのビュー ファイルをロックします。これは、変更を保存するために IISExpress を再起動する必要があることを意味します。

あなたにも似たようなことが起こっているのではないでしょうか?

于 2013-09-16T08:59:27.800 に答える