发布到Azure后找不到视图

时间:2016-09-08 16:28:09

标签: c# asp.net-mvc azure asp.net-core-mvc azure-web-sites

我创建了一个ASP.NET MVC Core项目并注册了一些自定义文件夹来搜索Views。我使用这样的自定义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:视图&#39;索引&#39;没找到。搜索了以下位置:
  /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服务器上。然而,他们仍然没有找到。

4 个答案:

答案 0 :(得分:6)

  

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

错误消息显示部署到Azure时缺少某些文件。我在当地测试了这个场景,每件事情都很好。如果您遇到此问题,我建议再次发布该文件夹,如下所示: enter image description here

答案 1 :(得分:2)

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

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

从项目设置中删除以上各行后,视图即被发布。

答案 2 :(得分:1)

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

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

将视图还原到项目中,并将更正后的项目发布到Azure后,该视图再次工作。

答案 3 :(得分:0)

Anton Kalcik Answer为我成功。

如果您使用的是Visual Studio,并且需要在Visual Studio中查看或编辑CSPROJ文件,则可以通过以下简单步骤进行操作:

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

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

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