Wie kann C# - Code für die Bibliothek weiß, dass es hosting-Anwendung, geben Sie ohne System.Web.dll?

Wir entwickeln verschiedene Anwendungen in Visual Studio 2010 mit C# und .NET 4.0 auf Windows. Zwei SilverLight-Anwendungen mit Leistungen von mehreren WCF-Projekte. Ein anderes ist eine Konsole-Anwendung.

Wollen wir einige "gewöhnliche" Funktionen in eine getrennte Library-Projekt, um zu faktorisieren und die Wiederverwendung von code. Diese Bibliothek muss wissen, wenn die Anwendung gehostet wird (IIS, ASP.NET...), wie dem WCF-Dienst oder als Konsolenanwendung ausgeführt wird, aufgrund von verschiedenen Datei-Pfad Handhabung.

Googeln diese Frage, Menschen gibt die Verwendung von System.Web.dll um zu wissen, ob der code gehostet wird, mit HttpContext, HostingEnvironment.IsHosted... Das problem ist, dass ein solcher Ansatz erfordert, um einen Verweis auf System.Web int er-Bibliothek-Projekt, da es nicht akzeptabel, wenn diese Bibliothek referenziert werden, die von einer Konsole-Projekt mit Client-Profil.

Die Idee ist, verwenden Sie eine andere Technik, die nicht mit der Nutzung des Systems.Web-Montage.

  • "wegen der unterschiedlichen Datei-Pfad-handling" - Datei Pfad Handhabung nicht anders sein muss zwischen ASP.NET -und Konsolen-Anwendungen. Wenn du genau erklären, warum Sie denken, Sie brauchen, jemand kann in der Lage sein, um die post eine Lösung, die verhindert, dass die Bibliothek-Klasse benötigen, um wissen über Ihre hosting-app.
  • Wenn die Bibliothek gehostet wird, um den Pfad der Datei in dem gleichen Ordner wie die Bibliothek/Anwendung, müssen wir HostingEnvironment.MapPath("~/" + fileName) Zuordnung des virtuellen Pfad zum physikalischen Pfad; wenn Sie eine Konsole-Anwendung, verwenden Sie einfach die filename als relativer Pfad.
  • Siehe meine Antwort, können Sie die Anwendung Ordner mit AppDomain.BaseDirectory.
Schreibe einen Kommentar