我创建了一个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服务器上。然而,他们仍然没有找到。
答案 0 :(得分:6)
System.InvalidOperationException:找不到视图“索引”。搜索了以下位置:/MyViewLocation/A/Views/Index.cshtml
错误消息显示部署到Azure时缺少某些文件。我在当地测试了这个场景,每件事情都很好。如果您遇到此问题,我建议再次发布该文件夹,如下所示:
答案 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文件,则可以通过以下简单步骤进行操作:
右键单击项目(在解决方案资源管理器中标记为不可用),然后单击“编辑yourproj.csproj”。这将打开您的CSPROJ文件进行编辑。
删除包含下面示例的所有代码行
<ItemGroup>
<Content Remove="Views\ToDos\Edit.cshtml" />
</ItemGroup>