【问题标题】:How can I make VS parse .cshtml files using Razor in a .NET Framework Console App?如何在 .NET Framework 控制台应用程序中使用 Razor 使 VS 解析 .cshtml 文件?
【发布时间】:2018-06-13 14:56:54
【问题描述】:

我在做什么: 开发一个.NET Framework 控制台应用程序,该应用程序将自行托管一个 ASP.NET 网站(使用 Microsoft.AspNetCore.Hosting)。

我有什么: 控制台应用程序有效,它在给定的domain:port 托管网站。我已经将它配置为使用 MVC,它也可以工作,即当我转到 http://localhost:1234/Home/Index 时它会找到控制器。

问题现在,我想使用 Razor。当我添加 .cshtml 文件时,Error List 窗口中出现以下错误: (这些不是构建错误,而是打开 .cshtml 文件时出现的错误。如果我关闭文件,错误就会消失。另外,即使出现这些错误,项目也会成功构建)

'_Page_Views_Home__ViewStart___Copy_cshtml.Execute()':找不到合适的方法来覆盖
当前上下文中不存在名称“上下文”
当前上下文中不存在名称“ViewData”
名称空间“System.Web”中不存在类型或名称空间名称“Helpers”
类型或命名空间名称“Linq”不存在于命名空间“System”中
名称空间“System.Web”中不存在类型或名称空间名称“WebPages”
名称空间“System.Web”中不存在类型或名称空间名称“WebPages”
名称空间“System.Web”中不存在类型或名称空间名称“WebPages”

有趣的是,最后一个错误是如何在同一文件、同一行中出现三次的。

Console App (.NET Framework)ASP.NET Web Application(.NET Framework) 的区别我目前发现:

  1. 我创建了一个新的 ASP.NET Web 应用程序 (.NET Framework),它也有 .cshtml。但是没有出现上述错误。
  2. 我比较了这两个项目,看看有什么不同。它在项目根文件夹和Views 文件夹中有一个Web.config 文件。然后我复制到相应的位置。 没有解决问题
  3. 它还有 Global.asax.exe 和 Global.asax.cs 文件。但他们似乎与.cshtml 文件(或?)没有任何关系。

我的控制台应用程序项目与 ASP.NET Web 应用程序 (.NET Framework) 有何不同因为.cshtml 文件出现上述错误

PS 不是一般的区别。但具体为什么 VS 不使用 Razor 解析 .cshtml 文件中的语法。我需要修改 .csproj 文件并在其中配置一些东西吗?

我可以做些什么来纠正这个问题?

更新

我在 .NET Framework 控制台应用程序 中安装了所有 NuGet 包,这些包默认安装在 .NET Framework ASP.NET Web 应用程序 中。我仍然收到 .cshtml 文件的错误。所以我猜它与包裹无关。

现在我将注意力放在 .csproj 文件上。所以我正在比较两种类型的项目的项目文件。显然他们有区别,但我无法指出某些事情。

我添加了带有 .csproj 文件的要点:

  1. .NET Framework ASP.NET Web Application
  2. .NET Framework Console Application

【问题讨论】:

  • 您可以在完整的 .Net Framework 上创建一个 Asp.net Core 网站,这是一个运行 Kestrel 的控制台应用程序。这还不够吗?
  • 你的 .csproj 里面有什么?
  • @KirkLarkin 我已经用 .csproj 文件添加了要点。检查问题。

标签: c# asp.net asp.net-mvc razor asp.net-core


【解决方案1】:

ASP.NET Core 应用控制台应用。但是,当然,并非所有控制台应用程序都是 ASP.NET Core 应用程序。首先也是最重要的,您需要Microsoft.AspNetCore.All NuGet 包。然后,您必须在 Program.cs 中实际引导 ASP.NET Core。这通常通过CreateDefaultWebHostBuilder 完成,然后您将使用BuildRun。不过,这只会为您提供托管基础设施。此外,您还需要为您正在使用的工作流程添加所需的服务。对于 Razor 视图支持,这几乎是 services.AddMvc()。您可以通过流畅的方法ConfigureServices 或通过Startup 类中的ConfigureServices 方法直接使用Web 主机构建器添加它(然后您需要告诉Web 主机构建器使用)。最后,您需要通过app.UseMvc 实际激活MVC 机制,这同样会在Startup 类的流畅方法ConfigureConfigure 中调用。

虽然您可以技术上从一个普通的旧控制台应用程序从头开始,但大多数 Web 应用程序所需的引导的剪切量通常会导致创建一个实际的 ASP.NET Core Web 应用程序项目是最好的路线。如果您此时不想启动新项目,我仍然建议至少暂时创建一个实际的 ASP.NET Core Web 应用程序项目,作为重新调整现有控制台应用程序的指南。

【讨论】:

  • 我已经完成了你提到的引导。也完成了 AddMvc() n UseMvc()。问题是 VS 给出了上面提到的语法错误。我不知道如何告诉 VS 使用 Razor 来解析 .cshtml 文件中的语法。我猜我需要修改 .csproj 文件并在其中配置一些东西?
【解决方案2】:

ASP.NET Core 应用是带有一些附加文件的 .NET Core 控制台应用。 Web.config 不被 asp.net 核心应用程序使用,它仅用于 IIS 设置,并且包含在您部署到 IIS 的情况下。

ASP.NET Core 应用没有 global.asax 或 global.asax.cs,这仅存在于旧版本的 ASP.NET

旧版控制台应用不是 .NET Core,它需要完整的 .NET 桌面框架。

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2011-03-14
    • 2019-05-18
    相关资源
    最近更新 更多