将 Razor View Engine 与 Nancy 一起使用,.cshtml 不是可用的扩展名

Using Razor View Engine with Nancy, .cshtml not an available extension

我正在 Mac 上使用 Nancy 开发一个项目,我正在使用标准文本编辑器 (Atom) 编辑我的项目。我想使用 Razor View Engine,我正在尝试弄清楚如何使用。

我收录了

但是当我加载项目时,出现错误:

Nancy.RequestExecutionException: Oh noes! ---> Nancy.ViewEngines.ViewNotFoundException: Unable to locate view 'task_added.cshtml' Currently available view engine extensions: sshtml,html,htm```

我还应该包含其他任何内容以使其识别 .cshtml 吗?

您是否阅读:Razor Engine Wiki and View location conventions

您是否有机会在 Bootcamp 或 Windows 机器上试用您的代码,看看它是否是 Mac 特定的?大概你在 Mono 上 运行,因为它在 Mac 上,同样你在 Mac 上有任何其他项目/教程 运行 吗?

您能否提供更多有关您尝试过/未尝试过的内容的详细信息?教程示例是否有效?

我猜测,您的视图文件 (.cshtml) 不在 Nancy 寻找它们的地方。你的文件夹结构是什么?

编辑

抱歉,我又看了一遍,显然 Nancy 没有使用剃须刀引擎(正如它明确说明的那样)。您不需要 HomeModule 中的 using 语句,那里没有引用。

您是否仔细检查了 Nancy 的项目参考并检查它是否已复制到 bin 文件夹中?

启用诊断 (Diags) 并查看 'Information' 面板,在 'Loaded View Engine' 下-这将确认加载了哪些视图引擎,尽管它无疑会说同样的事情.

鉴于 Nancy 通过扫描加载的 appdomain 和私有 bin 目录以查找任何引用 nancy 的 dll 并自动注册 IViewEngine 类型来自动定位视图引擎,这强烈表明 Razor 程序集不是在 bin 文件夹或类似的文件夹中。

成功了!不幸的是,视图引擎建立在不会 运行 on a Mac 的代码之上。此解决方案仅适用于 Windows。

我将以下代码添加到我的配置文件 (Startup.cs),翻译自 Razor Engine Wiki.

public class RazorConfig : IRazorConfiguration
{
    public IEnumerable<string> GetAssemblyNames()
    {
        return null;
    }

    public IEnumerable<string> GetDefaultNamespaces()
    {
        return null;
    }

    public bool AutoIncludeModelNamespace
    {
        get { return false; }
    }
}

每个视图顶部的行 @inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<nancytest.Objects.Task> 也是不必要的。

我遇到了同样的问题。我在 top shelf windows 服务上使用 Nancy self host。我的问题是我只有对核心应用程序的引用,但没有对 windows 服务项目中的 Nancy.ViewEngines.Razor.dll 的引用。

为了修复它,我将 Nancy.ViewEngines.Razor.dll 引用添加到我的 WindowsService 项目

这是我的故事以及我是如何修复它的,以防有人遇到同样的问题:

我编译了我的 Nancy 应用程序,它在我的开发计算机上运行良好 (Windows 10)。

我通过 Google 驱动器将应用程序发送到另一台计算机,我的客户在他们的计算机上发现了与此处的原始发布者相同的错误(也是 Windows 10)。

问题的原因是 Windows 阻止了 文件 Nancy.ViewEngines.Razor.dll 在我客户的计算机上,因为他们从网上下载了我的代码。

在客户端计算机上,我从文件 属性 上下文菜单中取消阻止文件,问题已解决。

P.S。我还先解除了对 cshtml 文件的阻止,但这并没有解决问题,至少它本身是这样。