2

Nancy のセルフホスト アプリケーションを Visual Studio で実行すると、すべてが期待どおりに機能しますが、ILMerge を使用して allInOne.exe を作成すると、すべての URL で 404 が発生します。

それが ILMerge コマンドです。

ILMerge.exe /target:console /out:allInOne.exe application.exe "Nancy.Hosting.Self.dll" "Nancy.dll"

問題は、どのモジュールも自動検出されないため、ルートが利用できないことです。この問題は、Merged Exe ファイルでも発生します。/bin/release で application.exe を実行すると、すべてが機能します。

よろしくお願いします

4

2 に答える 2

1

デフォルトでは、「Nancy」が含まれているアセンブリ (通常は Nancy.dll) はスキャンされません。それらをマージしたので、マージされたアセンブリ全体を除外します。trueNancy アセンブリ ( TypesOf 呼び出しのフラグ) を除外しないように、このメソッドをオーバーライドすることで動作を変更できます。

https://github.com/NancyFx/Nancy/blob/master/src/Nancy/Bootstrapper/NancyBootstrapperBase.cs#L94

于 2013-04-18T13:48:18.097 に答える
1

私の経験では、2 つの部分が必要であることがわかりました。まず、Andreas が提案したように、ブートストラップで Modules プロパティをオーバーライドします。

protected override IEnumerable<ModuleRegistration> Modules
{
    get
    {
        return
            AppDomainAssemblyTypeScanner
                    .TypesOf<INancyModule>(ScanMode.All)
                    .NotOfType<DiagnosticModule>()
                    .Select(t => new ModuleRegistration(t))
                    .ToArray();
    }
}

次に、Nancy ホストを作成するときに、ブートストラッパーのインスタンスを取るオーバーロードを使用します。

using (var host = new NancyHost(new Bootstrapper(), new Uri(uri)))
{
    host.Start();
    // Do your thang
}

私は元々、Uri のみを受け取るオーバーロードを使用していましたが、ILMerged ホストを実行しているときにエンドポイントをヒットできませんでした。私の推測では、Nancy もbootstrapperを自動検出し、それが Nancy のアセンブリにある場合はそれを見つけることもできません。

于 2016-07-13T15:08:42.207 に答える