2016-07-06 17 views
1

In einer meiner Klassenbibliotheken möchte ich nur einen einzigen Anruf an System.Web.Mvc.Server.MapPath(string path).Wo referenziere ich System.Web.Mvc.dll?

Wenn ich das NuGet-Paket Microsoft.AspNet.Mvc in diese Klassenbibliothek installiere, muss ich zuerst das Microsoft.AspNet.WebPages-Paket installieren, das weitere Abhängigkeiten haben kann.

Ich möchte nur die einzelne DLL System.Web.Mvc.dll seit der Server Klasse ist da drin.

Ich habe versucht, die DLL aus dem Pfad verweisen:

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.2.3 \ lib \ net45

aber diese DLL hat nicht die Server Klasse im System.Web.Mvc Namespace.

Und ich sehe diese DLL nirgendwo sonst auf meinem Rechner.

Wo kann ich auf diese DLL verweisen? Früher war es so einfach. Und es blieb einfach, wenn Sie nur MVC bis 2010 referenzieren wollten.

+2

Sie brauchen nicht System.Web.Mvc dafür, hier sehen http://stackoverflow.com/questions/1199486/server-mappath-in-c-sharp-classlibrary – Esko

+0

[HttpServerUtility.MapPath] (https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.mappath (v = vs.110) .aspx) ist ein Teil von 'System.Web' (beide Namensraum und Assembly). Es ist nicht spezifisch für MVC. Eine stabilere Lösung könnte auch die Verwendung von [HostingEnvironment.MapPath] (https://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.mappath.aspx) sein, da dies nicht webserverspezifisch ist. Siehe auch vorherige Frage zum Unterschied zwischen den 2 auf SO hier: http://Stackoverflow.com/a/3796042/1260204 – Igor

+0

@Esko Danke. Bitte schreibe das als Antwort? –

Antwort

1

Es gibt keine Notwendigkeit, System.Web.Mvc-Assembly in Ihrem Projekt zu haben, um Server.Mappath zu verwenden. Verweis auf System.Web in Ihrem Projekt alles, was Sie benötigen und Sie können

var path = System.Web.HttpContext.Current.Server.MapPath("default.aspx"); 
0

tun Wenn ich das NuGet Paket Microsoft.AspNet.Mvc in dieser Klasse Bibliothek zu installieren, ich muss zuerst die Microsoft installieren .AspNet.WebPages Paket, das weitere Abhängigkeiten haben kann.

Ja, und das seit 2010 nicht verändert hat aber NuGet machte es viel einfacher, indem sowohl die Installation die Dateien und verweisen die Referenzen Hinzufügen auf diese Dateien in Ihrem Projekt und Hinzufügen aller abhängigen NuGet Pakete in einem einfachen Schritt.

Wo kann ich auf diese DLL verweisen?

Die Dateien, die von NuGet installiert sind, werden unter dem Root-Verzeichnis (der gleichen Stelle, wo Ihre Lösung Datei ist) physisch in einem Verzeichnis \packages benannt.

Aber NuGet fügt automatisch die Verweise auf die Dateien für Sie hinzu, wenn Sie das NuGet-Paket installieren, also müssen Sie sich nicht mit ihnen anlegen, wenn etwas schief geht.

Um zum Beispiel Microsoft.AspNet.Mvc zu installieren, müssen Sie einfach den folgenden Befehl in der Package Manager Console ausführen.

PM> Install-Package Microsoft.AspNet.Mvc -Version 5.2.3 

die auch Version 5.2.3 von MVC zusammen mit all ihren Abhängigkeiten und verweisen diese DLLs von Ihrer .csproj Datei installieren.

Weiterführende Literatur: Using NuGet Part 1: NuGet Basics

+0

Nein, NuGet gab es nicht im Jahr 2010. Zweitens, ich habe überhaupt keine der Grundlagen über NuGet gefragt, mit dem ich vertraut bin, in meiner Frage. –

+0

Ich habe nicht gesagt, dass NuGet im Jahr 2010 existierte, aber seine Einführung hat das Konzept der Referenzierung von DLLs und deren Abhängigkeiten erleichtert. Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, da dies allgemein bekannt zu sein scheint, wenn Sie mit NuGet vertraut sind. Abhängigkeiten werden von NuGet * in Ihrem Projekt installiert * und fügt ihnen automatisch auch Projektreferenzen hinzu. Wenn Sie fragen, wo sie sich befinden, müssen Sie manuell versuchen, etwas manuell zu tun, das NuGet bereits automatisch ausführt. Die meisten Abhängigkeiten werden nicht mehr von einem gemeinsamen Speicherort auf Systemebene referenziert. – NightOwl888

Verwandte Themen