我有一个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/