2016-08-10 42 views
9

Tôi có ứng dụng ASP.NET Core. Ứng dụng cần được bắt đầu bằng dịch vụ windows. Khi dịch vụ chạy các ứng dụng, tôi đang gặp các lỗi sau:ASP.NET Core không thể tìm thấy số lượt xem

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 

Tuy nhiên, nếu tôi chạy các ứng dụng bằng cách nhấp vào exe-file, tất cả mọi thứ có vẻ là bình thường. Tôi đã kiểm tra kỹ, dịch vụ có đủ quyền và lượt xem ở đúng vị trí.

NHƯNG! Tôi đã có một tình huống khi dịch vụ tìm kiếm một tệp khác ở đâu đó trong thư mục win32, bởi vì tôi đã nhầm lẫn và sử dụng Directory.GetCurrentDirectory() thay vì Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) để tìm thư mục hiện tại. Có thể là sai lầm tương tự đã được thực hiện?

+2

Cố gắng đặt thư mục hiện tại khi khởi động dịch vụ. Mặc định là System32 Tôi nghĩ rằng –

+1

@ Aleksey L. Cảm ơn, tôi đã tìm ra nó! : D –

Trả lời

7

Vấn đề hiện tại thực sự tương tự như trước đây. Khi nó bật ra, tôi nên đã sử dụng cùng Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) trong Startup.cs: Main

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

nơi theo mặc định Directory.GetCurrentDirectory() được sử dụng như một đối số cho UseContentRoot(.). Ngoài ra các hoạt động tương tự phải được thực hiện một số dòng mã trước đó, khi ConfigurationBuilder được gọi.

Gốc của sự cố là dịch vụ cửa sổ đang được gọi từ thư mục win32, do đó, Directory.GetCurrentDirectory() đang cung cấp thư mục win32 thay vì thư mục tệp thực thi.

Các vấn đề liên quan