index.g.cshtml在哪里?

28
我正在尝试学习ASP.Net Core Razor Pages,但是在构建解决方案时经常遇到CS0234错误,指出文件Index.g.cshtml.cd中缺少一个命名空间,但是这个文件在哪里?
我已经尝试过:
  1. 所有的构建/清理/重新构建解决方案选项。
  2. 我已经重启了Visual Studio
  3. 我已经删除了DEBUG文件并重新启动VS,最后
  4. 我已经重启了我的电脑。 唯一有效的解决方案似乎是删除整个解决方案/项目并重新开始。
肯定有解决方法吧? 你能帮忙吗?
11个回答

37
如果出现错误提示缺少一个using指令或命名空间,通常意味着视图(.cshtml.vbhtml)中有一条指令,编译器无法解析。在我的情况下,在一个部分视图中有以下语句:
@inject UserManager<AppUser> UserManager

接着我对Web应用程序中的AppUser类 Namespace.Web.AppUser 进行了重构,并将其移动到了 Namespace.Entities.AppUser ,这导致了那个错误的发生。

有不同的方法可以解决这个问题。 最简单的方法是使用完全限定的类型命名空间:

@inject UserManager<Namespace.Entities.AppUser> UserManager

如果另一个项目在不同的项目中,请不要忘记添加对该项目的引用。 或:添加使用语句:

@using Namespace.Entities;

或者:将上面的using语句添加到您的~\Views\_ViewStart.cshtml中。这将使该类在所有视图中可用。


1
它也可能是一个强类型视图:@model Namespace.Entity - Zack Peterson
@ZackPeterson,是的 - 绝对没错。关键点就是,在您的视图中直接出现了编译时错误,并且没有.g.cshtml文件可供检查。 - Marco
你好,我已经做了所有的事情(底部添加了 using namespace.entities),但是当我使用 build+IntelliSense 时仍然会出现错误。但是,当我将其切换到只构建或仅 IntelliSense 时,它并不会显示出来。我知道这是一个旧答案,但我希望你能看到这个消息。它只为 obj 文件夹中的调试文件提供了错误提示,而不是常规视图文件。 - Travis Crum
@ZackPeterson,这解决了我的问题。我已经更改了项目的模型名称,以从 Blazor 页面切换到 MVC 风格的项目。我想使用原始命名空间。视图文件夹中有一个 @ Model 指令仍在使用旧的命名空间,重命名它就足以解决这个问题。 - Paras Parmar

14

我也遇到了与Visual Studio 2019 16.2.2相同的错误。在我的情况下,我更改了一些模型的名称。但是,错误没有显示在实际使用这些模型的视图中,而是出现在page.g.cshtml文件而不是page.cshtml文件中。

所以,我的解决方案非常简单。如果错误在page.g.cshtml文件中,请忽略g,转到视图page.cshtml文件中,将模型名称更新为正确的名称,重新构建即可消除错误。


谢谢,这是我情况下的解决方案! - gpanagopoulos

5

右键单击您的项目并在资源管理器中打开文件夹。然后搜索 "Index.g.cshtml.cs" 文件,然后删除搜索结果。

确保您的 Index.cshtml 引用了正确的模型。


3

最近我遇到了相同的问题,

请尝试以下简单方法:

  1. 复制错误并将其粘贴到记事本中。您可以在那里查看错误文件的原始路径,例如:'YourProjectFolder'\obj\Debug\netcoreapp2.2\Razor\Views\'View Name'\index.g.cshtml.cs

  2. 找到该文件,如果错误仍然存在,请确保index.cshtml文件中引用了正确的命名空间,否则删除该文件并重新构建。

  3. 还要检查是否有任何被排除在项目之外的重复文件。如果存在,请也删除该文件。

  4. 现在清理并重新构建项目。(您可能需要清理、关闭VS、重新构建)


欢迎来到SO!请编辑您的问题并详细说明(1)为什么您的配方有效,以及(2)您在最后一点中确切意思是什么。我猜它涉及到npm cache clean或其他东西。 - B--rian
@B--rian 我上一个观点并不是指npm cache clean,我是指项目清理和重建选项。此外,正如ImConfused在下面回复的那样,这不可能是VS的错误。ImConfused可能已经仔细查看了错误详细信息。VS会清楚地告诉你有关错误的信息。 - Magesh

2

1
也许我的回答有点晚,但希望能对某人有所帮助: 我遇到了相同的问题,因为我改变了项目名称,然后尝试在控制器和模型中更改命名空间,后来我发现在(Pages/_ViewImports.cshtml)中直接提到了命名空间,于是我将它们更新为与我的模型中使用的命名空间匹配,问题就解决了。ViewImportsImage 现在我的ViewImports.cshtml内容如下: ViewsImport.cshtml content

0
这是一个Microsoft.AspNetCore.Razor.Design包的问题。
我在我的VS2017上尝试了2.2版本,不支持它,并且在obj目录中显示“ .g.cshtml未找到”。
我按照以下方式解决了该问题:
  • 将我的项目ASP.NET Core版本从2.2降级为2.1

  • startup.cs进行更改:

    1. 将CompatibilityVersion.Version_2_2改为CompatibilityVersion.Version_2_1
    2. 将Nuget软件包的所有dll更改为2_1支持的dll
    3. SDK确保其为2.1.x
问题得到解决。

0

实际上,这个问题没有一个确切的答案。 事实证明,文件是在DEBUG文件夹内创建的。 然而,在删除Debug文件夹后,我仍然收到错误信息。 所以这一定是VS的一个bug吧?


0

您可以尝试以下解决方案:

  1. 前往 C:\Temp\msbuild
  2. 在那里,您会找到与您的项目名称相同的文件夹,并在这些文件夹中找到如下图所示的文件
  3. 尝试删除这些文件并重新构建您的解决方案,这可能会有所帮助

1
谢谢……但我在C:\上找不到Temp文件夹。我已经“取消隐藏”了应该被隐藏的文件夹。在C:\Windows中有一个Temp文件夹,但它并不包含你展示的任何文件。 - ImConfused
抱歉晚回复,工作比较忙。您可以尝试以下步骤:
  1. 在我们的系统中搜索“%temp%”,或直接在您的系统上搜索“Index.g.cshtml.cd”。
  2. 或者双击该错误,在Visual Studio中打开该文件,并右键单击并单击打开文件位置。
- Apoorva Raju

0

在_ViewImports中添加完整命名空间

@using Microsoft.AspNetCore.Http


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接