剃刀无法找到类型或命名空间

MrJ*_*eno 0 razor asp.net-core-mvc asp.net-core

我对这个问题有一个非常非常类似的问题.

你好.
我有一个针对.NET 4.61的应用程序(服务),并尝试使用WebListener转移到AspNetCore自托管主机.
我试图通过在控制台应用程序中测试它来调查这些要求.
我装箱该项目是一个正常的Windows控制台应用程序,我引用的所有的NuGet需要的软件包,并创建所需的启动类,并创建和启动与WebHostBuilder主机.

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

我们之前尝试和测试的内容有所不同.

到现在为止,我只是做了HomeController ,不得不Index返回一个string"Hello world".跑完应用程序,转到localhost并得到响应.完善.

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

堆栈跟踪:

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

其次是150行,如下所示:

gee1fd0w.wuj(4,11):错误CS0246:找不到类型或命名空间名称'System'(您是否缺少using指令或程序集引用?)
gee1fd0w.wuj(5,11):错误CS0246:无法找到类型或命名空间名称'System'(您是否缺少using指令或程序集引用?)
gee1fd0w.wuj(6,11):error 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上的Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationResult.EnsureSuccessful()的值
. Razor.Internal.CompilerCache.CreateCacheEntry(String relativePath,String normalizedPath,Func'2 compile)
---从抛出异常的上一个位置开始的堆栈跟踪结束---

其次是:

at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Mvc.Razor.Internal.CompilerCache.GetOrAdd(String relativePath,Func'2 compile)
at at Microsoft.AspNetCore.Mvc.Razor上的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.FindView(ActionContext context,String viewName )
中的Microsoft.AspNetCore.Mvc.Razor.RazorViewEngine.LocatePageFromViewLocations(ActionContext actionContext,String pageName,Boolean isMainPage)
中的RazorViewEngine.OnCacheMiss(ViewLocationExpanderContext expanderContext,ViewLocationCacheKey cacheKey),Boolean isMainPage)
在Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.FindView(ActionContext co)ntext,String viewName,Boolean isMainPage)
Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor.FindView(ActionContext actionContext,ViewResult viewResult)
at Microsoft.AspNetCore.Mvc.ViewResult.d__26.MoveNext()
---堆栈跟踪结束从之前的位置抛出异常---

接下来是一系列较短的堆栈跟踪:

at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at 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(状态及之后,范围和范围,对象&状态,布尔逻辑isCompleted)
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__22 .MoveNext()
---抛出异常的前一个位置的堆栈跟踪结束---
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context)的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
处微软.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State&next,Scope&scope,Object&state,Boolean&isCompleted)
at 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.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
处 (任务任务)
在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文件长度为1300多行,而mvc应用程序版本长度超过4300行,所以我不完全确定通过它并确定原因为何而另一个无效.

编辑:

它似乎主要是很多依赖范围不同,很多mvc依赖范围都包含依赖关系"NETStandard.Library": "1.6.1",但也有很多其他范围.还有一堆控制台应用程序没有的编译范围.

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

我会在这里留下这个问题,万一有人发现自己处于类似情况.

Dea*_*ane 7

我之前遇到过这种情况.

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

我可能在技术上不正确,但我认为这里发生的事情是你的旧构建与你的新构建产生冲突,新构建具有新的(或不同的)引用.