2016-08-10 79 views
9

我有一個ASP.NET Core應用程序。 應用程序需要由Windows服務啓動。當服務運行應用程序,我有以下錯誤:ASP.NET Core找不到視圖

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我認爲 –

+1

@ Aleksey L.謝謝,我只是想通了! :d –

回答

7

目前的問題確實與前者相似。事實證明,我應該用在Startup.cs相同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文件夾,而不是可執行文件的文件夾。