2016-08-10 9 views
9

私はASP.NET Coreアプリケーションを持っています。 アプリケーションはWindowsサービスで起動する必要があります。サービスは、アプリケーションを実行すると、私は次のエラーを持っている:ASP.NETコアがビューを検出できませんでした

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!私は間違いを犯しての代わりにPath.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)の代わりに現在のフォルダを見つけるために、サービスがwin32フォルダのどこかの別のファイルを探している状況がありました。同じような間違いが起きた可能性はありますか?

+2

サービスの開始時に現在のディレクトリを設定しようとします。デフォルトはSystem32だと思います。 –

+1

@ Aleksey L.ありがとう、私はそれを理解しました! :D –

答えて

7

現在の問題は、以前の問題と実際に似ていました。

var host = new WebHostBuilder() 
    .UseKestrel() 
    .UseConfiguration(config) 
    .UseContentRoot(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)) 
    .UseStartup<Startup>() 
    .Build(); 

メインデフォルトDirectory.GetCurrentDirectory()UseContentRoot(.)の引数として使用された:それが判明したように、私はStartup.csで同じPath.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)を使用している必要があります。 ConfigurationBuilderが呼び出されたときにも、同じ動作を数行前に実行する必要があります。

Windowsのサービスがwin32フォルダから呼び出されているので、Directory.GetCurrentDirectory()は実行可能ファイルのフォルダではなくwin32フォルダを指定しています。

関連する問題