【问题标题】:Razor The type or namespace could not be foundRazor 找不到类型或命名空间
【发布时间】:2017-07-26 19:14:42
【问题描述】:

我有一个与this one 非常非常相似的问题。

嗨。
我有一个针对 .NET 4.61 的应用程序(服务)并尝试使用 WebListener 移动到 AspNetCore 自托管。
我正在尝试通过在控制台应用程序中对其进行测试来调查需求。
我创建的项目是一个普通的 Windows 控制台应用程序,我使用 nuget 引用了所有必需的包并创建了所需的启动类,并使用 WebHostBuilder 创建和启动主机。

(我没有普通的 Windows 控制台应用程序,但我的 ubuntu 笔记本电脑上有一个 dotnet 控制台应用程序)

我们之前尝试和测试过的内容略有不同。

到目前为止,我只创建了一个 HomeController 并让 Index 返回一个 string"Hello world"。运行应用程序,访问 localhost 并获得响应。完美。

现在我添加的只是 Index 通过返回 View() 返回一个 IActionResult。然后我在/Views/Home/ 中创建了一个Index.cshtml 文件,现在我得到了这个:

堆栈跟踪:

失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[0] 发生了未处理的异常:发生了一次或多次编译失败:

后跟这样的 150 行:

gee1fd0w.wuj(4,11):错误 CS0246:找不到类型或命名空间名称“System”(您是否缺少 using 指令或程序集引用?)
gee1fd0w.wuj(5,11):错误 CS0246:找不到类型或命名空间名称“System”(您是否缺少 using 指令或程序集引用?)
gee1fd0w.wuj(6,11):错误 CS0246:找不到类型或命名空间名称“System”(您是否缺少 using 指令或程序集引用?)
...
gee1fd0w.wuj(37,13):错误 CS0518:未定义或导入预定义类型“System.Object”
gee1fd0w.wuj(37,13):错误 CS0518:未定义或导入预定义类型“System.Void”

结尾:

gee1fd0w.wuj(33,36):错误 CS0161:'_Views_Home_Index_cshtml.ExecuteAsync()':并非所有代码路径都返回值
在 Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationResult.EnsureSuccessful()
在 Microsoft.AspNetCore.Mvc.Razor.Internal.CompilerCache.CreateCacheEntry(String relativePath, String normalizedPath, Func'2 编译)
--- 从之前抛出异常的位置结束堆栈跟踪 ---

接下来是:

在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 Microsoft.AspNetCore.Mvc.Razor.Internal.CompilerCache.GetOrAdd(String relativePath, Func'2 编译)
在 Microsoft.AspNetCore.Mvc.Razor.Internal.DefaultRazorPageFactoryProvider.CreateFactory(String relativePath)
在 Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.CreateCacheResult(HashSet`1 expirationTokens, String relativePath, Boolean isMainPage)
在 Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.OnCacheMiss(ViewLocationExpanderContext expanderContext, ViewLocationCacheKey cacheKey)
在 Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.LocatePageFromViewLocations(ActionContext actionContext, String pageName, Boolean isMainPage)
在 Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.FindView(ActionContext 上下文,字符串 viewName,布尔 isMainPage)
在 Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.FindView(ActionContext 上下文,字符串 viewName,布尔 isMainPage)
在 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor.FindView(ActionContext actionContext, ViewResult viewResult)
在 Microsoft.AspNetCore.Mvc.ViewResult.d__26.MoveNext()
--- 从之前抛出异常的位置结束堆栈跟踪 ---

随后是一系列较短的堆栈跟踪:

在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__30.MoveNext()
--- 从先前抛出异常的位置结束堆栈跟踪 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__28.MoveNext()
--- 从先前抛出异常的位置结束堆栈跟踪 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResultExecutedContext 上下文)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态和下一个,范围和范围,对象和状态,布尔值和已完成)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__22.MoveNext()
--- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext 上下文)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态和下一个,范围和范围,对象和状态,布尔值和已完成)
在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__20.MoveNext()
--- 从先前抛出异常的位置结束堆栈跟踪 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext()

堆栈跟踪结束

现在我不确定我是否完全理解上一张海报得到的答案:

Mvc 的运行时编译依赖于 DependencyContext(deps 文件)来查找仅在使用 dotnet CLI 编译时生成的编译引用。您必须在应用程序启动过程中添加编译引用才能使视图编译正常工作。

我确实通过 dotnet cli 进行了编译,但这里还有什么我遗漏的吗?当我尝试通过运行dotnet new mvc 并删除除控制台项目中的内容之外的所有内容来复制我的项目时。它像雨一样运行,我从我的 Index.cshtml 中得到了 hello world。

Instinct 告诉我问题出在一些文件差异上,但我已经对所有文件进行了差异化,除了 app-name 之外我找不到任何差异。我可能错过了一些东西,但我想知道它是否可能是我不知道的自动魔法?

编辑:

已找到问题,看起来这是他们生成的bin/debug/netcoreapp1.1/<appname>.deps.json 的不同之处。有很多不同之处,现在去研究一下。但是,如果我将该文件从 mvc-project 复制粘贴到控制台应用程序,一切运行正常。

不幸的是,控制台应用程序deps.json-file 有 1300 多行,而 mvc 应用程序版本有 4300 多行,所以我不完全确定通过它并确定为什么一个工作和另一个工作是否可行不要。

编辑:

这似乎是一大堆不同的依赖范围,一大堆 mvc 包含对 "NETStandard.Library": "1.6.1" 的依赖,但还有许多其他的。还有一堆控制台应用程序没有的编译范围。

事实上,这似乎是唯一的区别。 mvc-application 的 deps.json-file 似乎有大约 3000 多行依赖项和编译范围。所以我想我会放弃找出导致问题的原因的想法,并计划学习如何“将控制台应用程序构建到 mvc-app 中”:)

我将把问题留在这里,以防有人发现自己处于类似情况。

【问题讨论】:

  • 尝试使用dotnet restore 并删除您的objbin 目录。
  • 这确实有效!这比从另一个项目复制要顺畅得多。谢谢!
  • 太棒了。我已经添加了一个答案,因此偶然发现此问题的每个人都可以轻松找到解决方案。我几乎可以肯定这里的关键是删除objbin 目录。

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


【解决方案1】:

我以前也遇到过这种情况。

执行dotnet restore 并删除您的objbin 目录。

我在技术上可能不正确,但我认为这里发生的情况是您的旧版本与具有新(或不同)引用的新版本产生冲突。

【讨论】:

  • 起初这对我不起作用。但是后来我还需要关闭并重新打开抛出错误的剃刀视图,然后宾果游戏才有效。非常感谢!
【解决方案2】:

当我将一些类移动到子目录并更改它们的命名空间时,我遇到了同样的问题。就我而言,删除 objbin 目录以及运行 dotnet restore 是不够的。

如果您使用完整路径作为对模型的引用,我必须更改所有 cshtml 文件中对旧文件夹的所有引用(例如 _ViewImports.cshtml)。所以从using ProjectName.Modelsusing ProjectName.Models.NewDirectory 等等。然后删除obj bin并运行dotnet命令。

【讨论】:

  • _ViewImports.cshtml 是我的问题
【解决方案3】:

这应该通过使用 dotnet restore 来解决。

编辑:没关系,我看到评论已经回答了。

【讨论】:

    【解决方案4】:

    我在 (ASP).NET Core 项目中遇到了这个问题。根本原因是因为在我错误地删除了我的 Razor 页面的支持类(我删除的 .cshtml.cs 文件)后,.csproj 文件自动更新了。 .csproj 文件捕获了一个更新,该更新明确地将 PageModel 类 out 保留在构建中,因此出现错误。

    背景信息: 我错误地删除了一个 PageModel 文件 (.cshtml.cs),但很快通过我的 Git 存储库撤消了删除。我没有意识到 .csproj 文件也被更新了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2017-07-12
      • 2011-05-13
      • 2021-03-01
      • 2020-08-13
      • 2018-11-18
      相关资源
      最近更新 更多