2013-04-15 12 views
9

Mam aplikację internetową, która ma wiele projektów bibliotek klasowych. Przykładowy kod poniżej.Jak korzystać z Server.MapPath wewnątrz projektu biblioteki klas

public static class LenderBL 
{ 
    static string LenderXml { get { return "MyPathHere"; } } 

    public static LenderColl GetLenders() 
    { 
     var serializer = new XmlSerializer(typeof(LenderColl)); 

     using (XmlReader reader = XmlReader.Create(LenderXml)) 
     { 
      return (LenderColl)serializer.Deserialize(reader); 
     } 
    } 
} 

I normalnie używać Server.MapPath uzyskać ścieżkę dla LenderXml nieruchomości, ale gdy używam go w bibliotece klasy jest powrót na ścieżkę roztworu macierzystego, a nie, że od projektu biblioteki klasy.

Czy istnieje sposób na zdobycie ścieżki do samego projektu klasy libary?

Z góry dziękuję.

Odpowiedz

28
var Mappingpath = System.Web.HttpContext.Current.Server.MapPath("pagename.aspx"); 

Mam nadzieję, że jest pomocny.

+1

I system.Web odniesienia. –

+2

Biblioteka System.Web będzie wymagać odwołania, nie tylko określone. –

+1

@ Freelancer - Przepraszam, może nie było jasne w moim pytaniu. Mogę uzyskać dostęp do Server.MapPath w bibliotece klas, niezależnie od tego, w jaki sposób zwraca ścieżkę do projektu nadrzędnego. Szukam uzyskać ścieżkę do projektu biblioteki klas. – dotnetnoob

3

Server.MapPath będzie zawsze działać w kontekście katalogu głównego. Tak więc w twoim przypadku katalog główny jest projektem nadrzędnym w sieci. Podczas gdy biblioteki klas (złoŜenia) wyglądają jak oddzielne projekty, w czasie wykonywania wszystkie one są hostowane w procesie projektowania sieci. Jest więc kilka rzeczy do rozważenia o zasobach znajdujących się w bibliotekach klas.

Po pierwsze, należy rozważyć, czy sensowne jest przechowywanie zasobów w bibliotece klas. Być może powinieneś mieć plik xml w projekcie WWW i po prostu odwoływać się do niego w bibliotece klas. Byłoby to zgodne z tym, w jaki sposób projekty MVC zachowują swoje poglądy w projekcie sieciowym. Zakładam jednak, że nie możesz tego zrobić.

Po drugie, możesz zmienić właściwości kompilacji pliku xml. Jeśli zmienisz plik na content i copy-always we właściwościach. Plik zostanie skopiowany do katalogu bin. Wtedy powinno działać Server.MapPath, ponieważ plik będzie dostępny.

Po trzecie, możesz uczynić zasób embedded resource, a następnie umieścić go w kodzie. Jest to sposób na zachowanie wszystkich zasobów lokalnych do zbudowanego zespołu.

Mam nadzieję, że to pomoże.

+0

To nie odpowiada na pytanie w najmniejszym stopniu. –

+2

@GrantThomas OP mówi, że 'Server.MapPath' działa, ale zwraca ścieżkę projektu nadrzędnego. Mogę tylko założyć, że projekt nadrzędny oznacza hosting projektu WWW. Te trzy opcje to wszystkie sposoby odwoływania się do zawartości pliku xml z kodu w przywoływanej bibliotece. Więc sposób, w jaki to czytam, jest całkowicie rozsądną odpowiedzią. –

10

Jak mogę zrozumieć trzeba bieżącej lokalizacji montaż

static public string CurrentAssemblyDirectory() 
{ 
    string codeBase = Assembly.GetExecutingAssembly().CodeBase; 
    UriBuilder uri = new UriBuilder(codeBase); 
    string path = Uri.UnescapeDataString(uri.Path); 
    return Path.GetDirectoryName(path); 
} 
+1

To jedyne rozwiązanie, które udało mi się znaleźć w bibliotece klas i aplikacji internetowej. Dziękuję Ci –

Powiązane problemy