2014-10-07 29 views
14

Mam migrację aplikacji sieci Web z VB do C#. Zaktualizowałem również do aktualizacji 3 w VS2013. Czy były jakieś zmiany w klasie Hosting? Występuje błąd przy użyciu Hosting.HostingEnvironment.MapPath i nie mogę nawet dodać odniesienia do System.Web.Hosting, ponieważ nie można go znaleźć. Podczas próby wyszukiwania zespołów podczas dodawania odniesienia, używając całej przestrzeni nazw, tj. System.Web.Hosting, nie zwraca ona żadnego wyniku.Nie można dodać odwołania do System.Web.Hosting

Mam instrukcję using w klasie i NIE jest ona wyszarzona, co oznacza, że ​​jest używana do czegoś, ale kod nie podoba się Hosting w Hosting.HostingEnvironment, ponieważ jest jaskrawo czerwony. Nie mam nawet klasy Hosting w intellisense, a projekt ma odniesienie do System.Web

Odpowiedz

9

Nie ma Hosting klasa. Zamiast tego, chcesz klasę HostingEnvironment:

HostingEnvironment.MapPath("~/Hello.txt"); 

Pełne rodzaj HostingEnvironment jest System.Web.Hosting.HostingEnvironment, więc trzeba mieć using System.Web.Hosting; klauzuli w pliku, lub użyć pełnej nazwy.

W każdym razie, co ważniejsze, jeśli tworzysz aplikację internetową, najprawdopodobniej nie chcesz już używać HostingEnvironment. Powinieneś zawsze mieć instancję np. HttpContext lub Page/Control, które dają dostęp do Server.MapPath, które powinny być preferowane.

Przestrzeń nazw System.Web.Hosting mieszka w System.Web.dll, więc po prostu upewnij się, że masz odniesienie do tego i powinieneś być w porządku.

Po migracji z VB zakładam, że konflikt jest spowodowany odmiennym traktowaniem przestrzeni nazw przez VB W języku C#, nie można po prostu to zrobić:

using System.Web; 

Hosting.HostingEnvironment.DoWhatever(); 

Podczas używania nazw, albo użyć pełnej nazwy typu w tym obszarze nazw, lub użyć stosując na dokładnym nazw i typ. Łączenie obu nie działa.

1

Czy próbujesz z Server.MapPath w System.Web?

+1

Że tak naprawdę nie rozwiązuje problemu, prawda? Co, jeśli OP musi użyć innego członka tej klasy/przestrzeni nazw? – Stijn

+0

@Stijn prawdopodobnie dlatego, że nie ma klasy Hosting? – mybirthname

+0

To jest problem, który mam, potrzebuję metodę QueueBackgroundWorkItem w klasie HostingEnvironment. Widzę przestrzeń nazw, klasę i metodę w przeglądarce obiektów, ale mój kod nie znajduje go podczas odwoływania się do wersji 4.5.2 System.Web.Hosting, –

3

Miałem ten sam problem, było coś innego niż to, co zostało opublikowane. Przeglądałem kod w bibliotece w oddzielnym projekcie (Model). W projekcie biblioteki, którego używam, System.Web nie był przywoływany.

Podstępem było to, że odwołanie dotyczyło System.Web.Http, więc znaleziono przestrzeń nazw System.Web, więc instrukcja using System.Web; została skompilowana poprawnie.

Uratuj się z kłopotami i bólem serca, zawsze naciskaj przycisk "Synchronizuj z aktywnym dokumentem" w Eksploratorze rozwiązań, zgodnie z opisem w tej odpowiedzi. https://stackoverflow.com/a/30517179/149884

+0

Na marginesie, klasa Model potrzebowała System.Web.Hosting do wysłania asynchronicznego komunikatu "Pożar i zapomnij" za pomocą 'HostingEnvironment.QueueBackgroundWorkItem' na wyjątku, który nie zostałby zabity przez IIS, recykling procesu roboczego. –

1

Nie sądzę, że można używać profilu klienta .NET do tworzenia aplikacji internetowych?

W każdym razie, że na bok. Przekonasz się, że przestrzenie nazw są zwykle ponownie używane w różnych zespołach.Zwłaszcza w zespołach szkieletowych, w których uważają, że niektóre klasy koncepcyjnie należą do siebie, nawet jeśli wspierają różne technologie.

Nie jestem pewien, czy wytłumaczyłem to dobrze, ale weź ten przykład. Istnieje przestrzeń nazw System w mscorlib, System, System.Net, System.Core i System.Numerics. System.Web może również pojawić się w System.Web.Http lub System.Web, a także w innych systemach takich jak System.Web.Abstractions, System.Web.Optimization, itp. W wyniku tego po prostu próbuje użyć instrukcji using do rozpoznania Zgromadzenie, z którego wywodzi się dana klasa, naprawdę może cię wyrzucić.

Typowe klasy w przestrzeni nazw System.Web.Hosting znajdują się w zestawie systemowym System.Web.dll. Microsoft stara się odrzucić bezpośrednie użycie System.Web.dll na rzecz bardziej modułowej implementacji Katana/Kestrel.

Powiedziawszy to, upewnij się, że twój projekt odwołuje się bezpośrednio do System.Web.dll. Aby użyć wymaganej klasy albo odwołaj się do niej przez jej pełną nazwę, tj. System.Web.Hosting.HostingEnvironment. Lub umieść using System.Web.Hosting; na początku pliku .cs.

Możliwe jest posiadanie właściwości w bieżącej klasie o nazwie HostingEnvironment lub klasy z innej przestrzeni nazw w innym zestawie o nazwie HostingEnvironment. W takim przypadku może być konieczne podanie nazwy klasy w całości lub wymyślenie monikera w celu łatwego odniesienia i zmniejszenia pisania.

Na przykład, można mieć to na początku pliku:

using HostEnv = System.Web.Hosting.HostingEnvironment; 

Potem gdzieś w ciele kodzie, można odnieść się do niego w ten sposób:

var appHost = HostEnv.ApplicationHost; 

Does ta pomoc?

dla danego scenariusza chcesz zająć, może wtedy to zrobić:

var resolvedPath = HostEnv.MapPath(pathToMap); 
Powiązane problemy