我与this one有一个非常非常相似的问题。
您好。
我有一个针对.NET 4.61的应用程序(服务),并试图使用WebListener转移到AspNetCore自托管主机。
我试图通过在控制台应用程序中测试它来调查这些要求 我创建的项目是一个普通的Windows控制台应用程序,我使用nuget引用了所有必需的包,并创建了所需的Startup类,并使用WebHostBuilder创建并启动了主机。
(我没有正常的Windows控制台应用程序,但我的ubuntu笔记本电脑上有一个dotnet控制台应用程序)
我们之前尝试和测试的内容有所不同。
到目前为止,我刚刚制作了HomeController
并Index
使用string
返回"Hello world"
。跑完应用程序,转到localhost并得到响应。完美。
现在我添加的是Index
返回View()
返回IActionResult。然后我在Index.cshtml
中创建了一个/Views/Home/
文件,现在我明白了:
失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware [0] 发生了未处理的异常:发生了一个或多个编译失败:
接下来是150行,如下所示:
gee1fd0w.wuj(4,11):错误CS0246:类型或命名空间名称'系统'找不到(你错过了使用指令或汇编引用吗?)
gee1fd0w.wuj(5,11):错误CS0246:类型或命名空间名称'系统'找不到(你错过了使用指令或汇编引用吗?)
gee1fd0w.wuj(6,11):错误CS0246:类型或命名空间名称'系统'找不到(你错过了使用指令或汇编引用吗?)
...
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 compile)
---从抛出异常的先前位置开始的堆栈跟踪结束---
其次是:
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在Microsoft.AspNetCore.Mvc.Razor.Internal.CompilerCache.GetOrAdd(String relativePath,Func' 2 compile)
在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 context,String viewName,Boolean isMainPage)
在Microsoft.AspNetCore.Mvc.ViewEngines.CompositeViewEngine.FindView(ActionContext context,String viewName,Boolean isMainPage)
在Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor.FindView(ActionContext actionContext,ViewResult viewResult)
在Microsoft.AspNetCore.Mvc.ViewResult.d__26.MoveNext()
---从抛出异常的先前位置开始的堆栈跟踪结束---
接下来是一系列较短的堆栈跟踪:
at 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 context)
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next,Scope& scope,Object& state,Boolean& isCompleted)
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__22.MoveNext()
---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context)
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next,Scope& scope,Object& state,Boolean& isCompleted)
在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
- 文件长度超过1300行,而mvc应用程序版本长度超过4300行,因此我不完全确定通过它并确定原因工作,而另一个没有。
它似乎主要是很多依赖范围不同,很多mvc依赖范围都包含"NETStandard.Library": "1.6.1"
的依赖,但也有很多其他范围。还有一堆控制台应用程序没有的编译范围。
事实上,这似乎是唯一的区别。 mvc-application的deps.json
文件似乎还有大约3000行的依赖项和编译范围。因此,我认为我会放弃弄清楚导致问题的原因,以及我计划如何将控制台应用程序构建到mvc-app中的计划&#34; :)
我会在这里留下问题,以防有人发现自己处于类似情况。
答案 0 :(得分:7)
我以前曾经遇到过这种情况。
执行dotnet restore
并删除您的obj
和bin
目录。
我可能在技术上不正确,但我认为这里发生的事情是你的旧构建与你的新构建产生冲突,它有新的(或不同的)引用。
答案 1 :(得分:1)
这应该通过使用dotnet restore来修复。
编辑:没关系,我看到评论已经回答了。
答案 2 :(得分:0)
当我将某些类移到子目录并更改其名称空间时,我遇到了同样的问题。就我而言,仅删除obj
和bin
目录以及运行dotnet restore
是不够的。
如果您使用完整路径作为模型引用,则必须更改所有cshtml文件(例如, _ViewImports.cshtml )中对旧文件夹的所有引用。因此,从using ProjectName.Models
到using ProjectName.Models.NewDirectory
,依此类推。然后删除obj bin
并运行dotnet命令。
答案 3 :(得分:0)
我在(ASP).NET Core项目中遇到了这个问题。根本原因是因为我错误地删除了Razor页面的后备类(我删除的.cshtml.cs文件)后,.csproj文件已自动更新。 .csproj文件捕获了一个更新,该更新明确使PageModel类不在的生成范围内,从而导致错误。
背景信息: 我错误地删除了PageModel文件(.cshtml.cs),但很快通过我的Git存储库撤消了删除操作。我没有意识到.csproj文件也已更新。