【问题标题】:.Net Core MVC App run in Visual Studio Code can't find views在 Visual Studio Code 中运行的 .Net Core MVC App 找不到视图
【发布时间】:2016-09-09 07:52:07
【问题描述】:

我在 Visual Studio 2015 中创建了一个新的 .Net Core MVC Web 应用程序。IDE 已完全更新,并且我安装了最新的 .net core SDK。它由解决方案文件和多个项目文件组成。我可以成功运行它并进入主页。

然后我在 Visual Studio Code 中打开了根文件夹(解决方案文件夹)并尝试运行它。它似乎开始正常,但是找不到“Views/Home/Index.cshtml”的默认视图。

我收到以下错误:

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

program.cs文件如下:

var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();

project.json 有以下内容:

"buildOptions": {
  "emitEntryPoint": true,
  "preserveCompilationContext": true
},

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

我想这是因为它试图在哪里寻找视图,因为我处于解决方案级别,而不是 VSC 中的项目级别。

有人有什么想法吗?

【问题讨论】:

  • 你的 project.json 在 buildOptions 中有 preserveCompilationContext 吗?
  • @Sanket 是的,“preserveCompilationContext”:真

标签: .net asp.net-core visual-studio-code


【解决方案1】:

我也遇到了同样的情况:

  1. 从 VS Code 打开解决方案文件夹。
  2. 添加了建议的构建配置:

此时您可以编译并运行该项目,但正如您所说,它无法找到视图。

我找到的解决方案是编辑.vscode\launch.json中的当前工作目录(cwd属性)配置:

并使其指向 Web 项目文件夹:

WebProject 文件夹等同于上一个答案示例中的Project root

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    .Net 核心项目的默认路由路径与 ASP.NET 4.5 (MVC5) 项目不同。

    假设您在 Startup.cs 文件中的默认路由是这样的:

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    

    您希望您的用户访问作为 Home 控制器的 Index 操作的视图,例如http://mysite/Home/Index

    您的目录结构需要是

    • 解决方案根
        • 项目根目录
          • 查看次数
            • 首页
              • Index.cshtml

    如果这对您不起作用,请检查启动文件并查看您的默认路由是否与我的示例中的匹配。

    【讨论】:

    • 我的目录结构和默认路由完全匹配你的。正如我所说,它在从 Visual Studio 运行时有效。但不是来自 Visual Studio Code。
    • 当您说从 VS Code 运行时,您可能意味着 Visual Studio(完整版)正在 IIS Express 中启动项目,而 VS Code 正在启动嵌入式 Microsoft Kestrel 服务器。您是否获得有关 kestrel 中的项目是作为开发还是生产运行的信息(应该在命令提示符控制台中看到)
    • 我相信是的。我在 VS 和 VSC 的调试模式下运行它。并且 Program.cs 设置为“UseKestrel”和“UseIISIntegration”
    • 好的。你可以检查以下内容。在您的项目中,您是否有一个带有 launchSettings.json 的 Properties 文件夹?这是我的文件看起来像Example 的示例
    • 是的,它完全匹配你的(项目名称除外)
    【解决方案3】:

    就我而言,我所要做的就是转到我的项目路径并输入dotnet build 以将我新添加的视图的路径生成到project.razor.json 文件中。我认为在 Visual Studio 中,它是自动生成的,因为我们使用 UI 来做这件事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 2016-11-15
      • 2016-06-11
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 2020-07-20
      相关资源
      最近更新 更多