首页 > 解决方案 > Razor 引擎找不到视图

问题描述

问题

我目前有一个 .NET Core 库,用于将 Razor 页面呈现为 HTML 电子邮件。我正在关注本教程。在编译时没有错误,但在运行时我收到以下错误:

'无法找到视图'/Views/Emails/NewOrder/NewOrder.cshtml'。搜索了以下位置:/Views/Emails/NewOrder/NewOrder.cshtml'

我已将构建操作设置为NewOrder.cshtmlto Content,并将复制到输出目录设置为Copy Always. 我不确定为什么无法找到视图,因为我可以在bin\Debug\netcoreapp2.2\Views电子邮件被复制到输出目录的文件夹中看到。


代码

我正在使用以下代码搜索视图:

private IView FindView(ActionContext actionContext, string viewName)
{
    var getViewResult = _viewEngine.GetView(executingFilePath: null, viewPath: viewName, isMainPage: true);
    if (getViewResult.Success)
    {
        return getViewResult.View;
    }

    var findViewResult = _viewEngine.FindView(actionContext, viewName, isMainPage: true);
    if (findViewResult.Success)
    {
        return findViewResult.View;
    }

    var searchedLocations = getViewResult.SearchedLocations.Concat(findViewResult.SearchedLocations);
    var errorMessage = string.Join(
        Environment.NewLine,
        new[] {$"Unable to find view '{viewName}'. The following locations were searched:"}.Concat(
            searchedLocations));

    throw new InvalidOperationException(errorMessage);
}

标签: c#asp.net-corerazor

解决方案


似乎它正在查看源目录而不是实际执行的程序集文件夹。我通过将方法的第一行更改为FindView以下内容来修复它:

var dir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var getViewResult = _viewEngine.GetView(executingFilePath: dir, viewPath: viewName, isMainPage: true);

推荐阅读