2016-08-10 24 views
9

Bir ASP.NET Core uygulamasına sahibim. Uygulamanın Windows servisi tarafından başlatılması gerekiyor. Ben bir exe dosyası tıklayarak uygulamayı çalıştırırsanızASP.NET Core görünümlerini bulamadı

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 

Ancak, her şey normal görünüyor: Hizmetin uygulama çalıştığında, aşağıdaki hatayı yaşıyorum. İki kez kontrol ettim, hizmetin yeterli izinleri vardı ve görünümler doğru yerde.

AMA! Ben bir hata yaptım ve geçerli klasör bulmak için Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) yerine Directory.GetCurrentDirectory() kullanılan çünkü servis win32 klasöründe bir yerde başka bir dosya ararken bir durum vardı. Benzer bir hata yapıldı mı?

+2

Servis başlangıcında geçerli dizini ayarlamayı deneyin. Varsayılan: System32 olduğunu düşünüyorum –

+1

@ Aleksey L. Teşekkürler, ben sadece anladım! : D –

cevap

7

Buradaki problem gerçekten de eski ile benzerdi.

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

Ana varsayılan Directory.GetCurrentDirectory() tarafından UseContentRoot(.) için bir argüman olarak kullanıldı: O döndü, ben Startup.cs aynı Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) kullanmış olmalıdır. Aynı işlem, daha önce ConfigurationBuilder çağrıldığında, birkaç kod satırı da gerçekleştirilmelidir.

sorunun kök Windows hizmet win32 klasöründen çağrıldığı, bu nedenle Directory.GetCurrentDirectory() win32 klasörünü yerine yürütülebilir dosyanın klasörünü veriyor.

İlgili konular