ASP.Core找不到视图

本文关键字:视图 找不到 Core ASP | 更新日期: 2023-09-27 18:01:51

我有一个ASP。. NET Core应用程序。应用程序需要通过windows服务启动。当服务运行应用程序时,我有以下错误:

InvalidOperationException: The view 'Index' was not found. The following locations were searched:
 /Views/Home/Index.cshtml
 /Views/Shared/Index.cshtml
EnsureSuccessful
MoveNext
ThrowForNonSuccess
HandleNonSuccessAndDebuggerNotification
MoveNext
ThrowForNonSuccess
HandleNonSuccessAndDebuggerNotification
MoveNext
MoveNext
ThrowForNonSuccess
HandleNonSuccessAndDebuggerNotification
MoveNext
MoveNext
ThrowForNonSuccess
HandleNonSuccessAndDebuggerNotification
MoveNext
ThrowForNonSuccess
HandleNonSuccessAndDebuggerNotification
MoveNext
ThrowForNonSuccess
HandleNonSuccessAndDebuggerNotification
MoveNext

然而,如果我通过点击exe文件来运行应用程序,一切似乎都很正常。我仔细检查了一下,服务有足够的权限,视图也在正确的位置。

但是!当服务在win32文件夹中寻找另一个文件时,我遇到了一种情况,因为我犯了一个错误,使用Directory.GetCurrentDirectory()而不是Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)来查找当前文件夹。有没有可能犯了类似的错误?

ASP.Core找不到视图

当前的问题确实与前者相似。事实证明,我应该在Startup.cs中使用相同的Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location):Main

var host = new WebHostBuilder()
    .UseKestrel()
    .UseConfiguration(config)
    .UseContentRoot(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location))
    .UseStartup<Startup>()
    .Build();

默认使用Directory.GetCurrentDirectory()作为UseContentRoot(.)的参数。当调用ConfigurationBuilder时,同样的操作必须在前面的几行代码中执行。

问题的根源是windows服务是从win32文件夹调用的,所以Directory.GetCurrentDirectory()给出了win32文件夹而不是可执行文件的文件夹。