我有一个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文件运行该应用程序,则一切似乎都很正常。
我再次检查,该服务具有足够的权限,并且 View 位于正确的位置。

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

最佳答案

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

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文件夹而不是可执行文件的文件夹。

关于c# - ASP.NET Core找不到 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38865362/

10-10 18:29
查看更多