发布到 Azure 后未找到视图

Posted

技术标签:

【中文标题】发布到 Azure 后未找到视图【英文标题】:View not found after publish to Azure 【发布时间】:2016-09-08 16:28:09 【问题描述】:

我创建了一个 ASP.NET MVC Core 项目并注册了一些自定义文件夹来搜索视图。我使用这样的自定义 IViewLocationExpander 类做到了这一点:

public class AppsViewLocationExpander : IViewLocationExpander

  public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, 
                                               IEnumerable<string> viewLocations)
  
    yield return "/MyViewLocation/A/Views";
    //and so on...
  

并在Startup.cs中使用了这个类:

public void ConfigureServices(IServiceCollection services)

    services.AddMvc();
    services.Configure<RazorViewEngineOptions>(options =>
    
        options.ViewLocationExpanders.Add(new AppsViewLocationExpander());
    );

MyViewLocation/A/Views 文件夹中有一些 *.cshtml 文件,并且本地调试会话没有任何错误继续进行。 现在我将 Web 应用程序发布到 Azure,我收到了 500 内部服务器错误。我附加了 Visual Studio 以调试此错误并收到此消息:

System.InvalidOperationException:未找到视图“索引”。搜索了以下位置: /MyViewLocation/A/Views/Index.cshtml

我做错了什么?我是否也必须在其他地方添加 Views-Folder?

编辑: 我在初始设置时修改了我的 project.json,但这对我的 Azure 问题没有帮助。但可能是在我本地调试时需要找到视图。

"publishOptions": 
  "include": [
    "wwwroot",
    "Views",
    "Areas/**/Views",
    "MyViewLocation/**/Views",
    "appsettings.json",
    "web.config"
  ]
,

编辑 2: 我手动将 *.cshtml 文件上传到 FTP 服务器。尽管如此,他们仍然没有找到。

【问题讨论】:

视图文件是部署到网络应用还是丢失? @DavidG 我在 FTP 上找不到它们,所以我认为它们不见了。这里需要修改部署脚本吗? 视图文件设置的Build Action 是什么? (即在 Visual Studio 中文件的属性中) @DavidG 属性窗口仅显示所有文件的文件名完整路径。这与 .NET 核心/新的 Visual Studio 项目结构有关吗? 啊,是的,好点子!所以文件应该只是复制过来。你是如何部署的? 【参考方案1】:

System.InvalidOperationException:未找到视图“索引”。搜索了以下位置:/MyViewLocation/A/Views/Index.cshtml

错误消息显示部署到 Azure 时缺少一些文件。我已经在本地测试过这个场景,一切正常。如果您遇到此问题,我建议您再次发布该文件夹,如下所示:

【讨论】:

【参考方案2】:

我在 .NET Core 2.2 中遇到了同样的问题,它是 *.csproj 中的设置。不知何故,我不小心将视图排除在发布之外。

<ItemGroup>
   <Content Remove="Views\ToDos\Edit.cshtml" />
</ItemGroup>

在我从项目设置中删除上述行后,视图已发布。

【讨论】:

【参考方案3】:

我有同样的症状,但原因不同。就我而言,Azure 中缺少的视图已从项目文件中丢失。这意味着在解决方案资源管理器中也找不到它。有几十个类似名称的视图,一个缺失的视图不容易被发现。不在项目文件中意味着视图文件未发布到 Azure。

但是,视图的 .cshtml 文件确实存在于项目目录中,因此当我在本地运行应用程序时找到了它。我能够通过右键单击解决方案资源管理器中的 Views 文件夹,然后单击 Add,然后单击 Existing Item 将其恢复到项目文件。 ...

在视图恢复到项目并将更正后的项目发布到 Azure 后,视图再次工作。

【讨论】:

【参考方案4】:

Anton Kalcik Answer 帮了我大忙。

如果您使用 Visual Studio 并且需要在 Visual Studio 中查看或编辑您的 CSPROJ 文件,您可以通过以下简单步骤来实现:

    在解决方案资源管理器中右键单击您的项目并选择卸载项目

    右键单击项目(在解决方案资源管理器中标记为不可用),然后单击“编辑 yourproj.csproj”。这将打开您的 CSPROJ 文件进行编辑。

    删除所有包含如下示例的代码行

    <ItemGroup>
       <Content Remove="Views\ToDos\Edit.cshtml" />
    </ItemGroup>
    
    进行所需的任何更改后,保存并关闭文件。再次右键单击节点,完成后选择重新加载项目。

【讨论】:

以上是关于发布到 Azure 后未找到视图的主要内容,如果未能解决你的问题,请参考以下文章

导航后未附加回收站视图

重新初始化主干视图后未触发事件

Razor 视图的有界属性在发布后未更新

部分视图刷新后未调用 JavaScript 函数

搜索后未找到访问表单记录源

UINavigationBar titleTextAttributes 从视图控制器返回后未更新