当我在Visual Studio中运行我的Nancy自主应用程序时,一切都按预期工作但当我使用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时,一切正常。
最好的问候
答案 0 :(得分:1)
默认情况下,它不会扫描“Nancy”所在的程序集(通常是Nancy.dll)。现在你已经合并了它们,它将排除整个合并的程序集。您可以通过重写此方法来更改行为,以便它不会排除Nancy程序集(TypesOf调用中的true
标志)
https://github.com/NancyFx/Nancy/blob/master/src/Nancy/Bootstrapper/NancyBootstrapperBase.cs#L94
答案 1 :(得分:1)
根据我的经验,我发现需要两个部分。首先,像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的程序集中,也无法找到它。