ASP.NET Core找不到视图

时间:2016-08-10 06:01:56

标签: c# asp.net-core

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

1 个答案:

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