2013-03-14 11 views
14

Mam klasy projekt libary (NotificationTemplate) które zwracają zawartość pliku:ścieżka do pliku w bibliotece klas

public static class Template 
{ 
    public static string NotificatioEmail 
    { 
     get { return File.ReadAllText("Templates\\NotificatioEmail.cshtml"); } 
    } 
} 

W tym projekcie znajduje się folder, Templates z NotificatioEmail.cshtml pliku.

Mam też dwie aplikacje: konsolową i ASP.NET MVC. Plik wrócił dobrze w aplikacji konsoli, ale w MVC pojawia się błąd file not found. Jak pisać uniwersalnie?
tryed to:

Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Templates", 
      "NotificatioEmail.cshtml") 

ale BaseDirectory nie obejmują bin folder.

Odpowiedz

31

Jak powiedziałeś BaseDirectory działa dla aplikacji konsolowych. W przypadku aplikacji MVC należy zamiast tego użyć RelativeSearchPath.

Więc można użyć tego kodu na obu platformach

var appDomain = System.AppDomain.CurrentDomain; 
var basePath = appDomain.RelativeSearchPath ?? appDomain.BaseDirectory; 
Path.Combine(basePath, "Templates", "NotificatioEmail.cshtml"); 
+1

To działa dla ASP.NET, ale nie działa w applciation konsoli. Jest równa zero. – user348173

+1

@ user348173 można zrobić 'System.AppDomain.CurrentDomain.RelativeSearchPath? System.AppDomain.CurrentDomain.BaseDirectory'? –

+0

Tak, ale czy to dobrze? Chcę zobaczyć inny sposób. – user348173

Powiązane problemy