2

当我在 Visual Studio 中运行我的 Nancy 自托管应用程序时,一切都按预期工作,但是当我使用 ILMerge 创建 allInOne.exe 时,我只会在每个 Url 上得到 404。

这就是 ILMerge 命令:

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

问题是没有一个模块是自动发现的,因此没有可用的路由。该问题也只出现在合并的 exe 文件中。当我在 /bin/release 中运行 application.exe 时,一切正常。

此致

4

2 回答 2

1

默认情况下,它不会扫描“Nancy”所在的程序集(通常是 Nancy.dll)。现在您已经合并了它们,它将排除整个合并的程序集。您可以通过覆盖此方法来更改行为,以便它不排除 Nancy 程序集(trueTypesOf 调用中的标志)

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

于 2013-04-18T13:48:18.097 回答
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 的程序集中,也将无法找到它。

于 2016-07-13T15:08:42.207 回答