我有一个ASP.NET核心应用程序。 该应用程序需要由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文件运行应用程序,一切似乎都正常。 我仔细检查过,服务有足够的权限,并且视图位于正确的位置。
BUT!我有一种情况,当服务在win32文件夹中的某个地方寻找另一个文件时,因为我犯了一个错误并使用Directory.GetCurrentDirectory()
而不是Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
来查找当前文件夹。是否有可能出现类似的错误?
答案 0 :(得分:7)
目前的问题确实与前者类似。事实证明,我应该在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
之前执行几行代码。
问题的根源是从win32文件夹调用windows服务,因此Directory.GetCurrentDirectory()
提供了win32文件夹而不是可执行文件的文件夹。