ASP.NET Core无法找到视图。

10

我有一个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)来查找当前文件夹。是否可能发生类似的错误?


2
尝试在服务启动时设置当前目录。默认值是System32,我认为。 - Aleksey L.
1
@ Aleksey L. 谢谢,我刚刚想通了! :D - Dmitry Volkov
1个回答

9

当前的问题与以前类似。事实证明,我应该在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文件夹而不是可执行文件所在的文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接