发布到 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 后未找到视图的主要内容,如果未能解决你的问题,请参考以下文章