Próbuję utworzyć silnie wpisany widok na podstawie klasy z innego zestawu. Z jakiegoś powodu mój widok Razor nie wydaje się mieć żadnej widoczności innych zestawów, do których odwołuje się mój projekt. na przykład
@model MyClasses.MyModel
powoduje błąd w programie Visual Studio 2010, „ MyClasses
Nie można znaleźć typu lub nazwy przestrzeni nazw (czy brakuje dyrektywy using lub odwołania do zestawu?)”.
Ta sama klasa, do której odwołuje się silnik widoku standardowego, działa dobrze. Mam ten sam problem, próbując odwołać się do klasy w treści mojego widoku.
Czy brakuje mi czegoś na temat Razor, czy muszę odwoływać się do zestawu w inny sposób?
asp.net-mvc
asp.net-mvc-3
razor
nickwesselman
źródło
źródło
Odpowiedzi:
Istnieje nowa sekcja konfiguracji, która jest używana do odwoływania się do przestrzeni nazw dla widoków Razor.
Otwórz
web.config
plik w swoimViews
folderze i upewnij się, że zawiera:Alternatywnie możesz dodać instrukcje using do udostępnionego układu:
Po zmodyfikowaniu pliku Web.config uruchom ponownie program Visual Studio, aby zastosować zmiany.
źródło
Copy Local = true
. W przeciwnym razie zespoły zewnętrzne mogą nie działać.Miałem ten sam problem: projekt MVC3 MyCore.Web odwoływał się do przestrzeni nazw MyCore.DBLayer z innego projektu w tym samym rozwiązaniu (z nazwą zestawu MyCoreDBLayer). Wszystkie obiekty z MyCore.DBLayer działało idealnie w sterownikach i modeli, ale nie powiodło się w maszynce z widokiem błędu „typu lub obszaru nazw«DBLayer»nie istnieje w obszarze nazw«MyCore»(czy brakuje odwołania do zestawu?)” , Który został oczywiście nie.
Dodanie odwołania zestawu do sekcji system.web / compilation / assemblies w głównym pliku web.config rozwiązało problem. Sekcja wygląda teraz następująco:
Pominięcie wersji, kultury i tokena było na razie w porządku, ale powinno zostać naprawione w przyszłości.
źródło
Views/web.config
i działało, gdy został tam umieszczony.W moim przypadku oddzielnym projektem, który zawierał przestrzeń nazw, była aplikacja konsoli. Zmiana na bibliotekę klas rozwiązała problem.
źródło
Żadne z powyższych również nie działało dla mnie;
Ale w końcu znalazłem coś, co dla mnie zadziałało:
To dlatego, że moje dane wyjściowe kompilacji trafiały do bin \ Debug \ do konfiguracji debugowania i bin \ Release \ do konfiguracji wydania. Jak tylko zmieniłem konfigurację kompilacji na "bin \" dla wszystkich konfiguracji (jak na obrazku poniżej), wszystko zaczęło działać tak, jak powinno !!!
Nie mam pojęcia, dlaczego rozdzielenie twoich kompilacji na foldery Release i Debug powinno spowodować uszkodzenie składni Razor, ale wydaje się, że coś nie może znaleźć zestawów. Dla mnie projekty, w których występowały problemy ze składnią maszynki do golenia, są w rzeczywistości projektami „biblioteki maszynki do golenia”. Są one ustawione jako projekty aplikacji, ale używam ich jako bibliotek klas z RazorGenerator do kompilowania moich widoków. Kiedy faktycznie próbowałem uruchomić jeden z tych projektów bezpośrednio, spowodowało to następujący błąd konfiguracji:
To doprowadziło mnie do próby zmiany wyjścia kompilacji, ponieważ zauważyłem, że dla wszystkich projektów internetowych wynik kompilacji wydaje się zawsze znajdować się bezpośrednio w folderze bin, w przeciwieństwie do domyślnego dla bibliotek klas, które mają zarówno foldery wydania, jak i debugowania.
źródło
Wydaje się, że szukasz tej odpowiedzi: https://stackoverflow.com/a/4136773/176877
Oznacza to, że otwórz wewnętrzny Views \ Web.Config (NIE główny) i dodaj przestrzeń nazw pod znacznikiem Pages:
Zapisz to, a następnie zamknij i ponownie otwórz plik Razor.
Jeśli używasz obszarów, musisz to zrobić dla każdego Web.Config w każdym obszarze.
Program Visual Studio stał się bardziej błędny przez lata, więc może wymagać zamknięcia pliku Razor z uruchomioną kompilacją debugowania, a następnie ponownego otwarcia pliku Razor lub w najgorszym przypadku może wymagać ponownego uruchomienia programu Visual Studio. Ale ostatecznie przedstawi ci plik Razor tak, jakby wszystko na tej liście przestrzeni nazw znajdowało się w instrukcjach @using u góry wszystkich twoich widoków.
źródło
W ASP.NET Core MVC rozwiązaniem jest dodanie
using
w _ViewImports.cshtml zamiast umieszczania go web.config w folderze widoku podczas pracy z ASP.NET MVC 5._ViewImports.cshtml
Widok
źródło
Dla mnie odwoływałem się do projektu, który był aplikacją konsolową. Został ustawiony do kompilacji jako exe (aplikacja konsoli) zamiast biblioteki klas (DLL). Kiedy to zmieniłem, bez problemu mogłem zobaczyć modele z tego oddzielnego projektu.
źródło
Otrzymałem ten sam błąd podczas próby użycia obiektów Smo w widoku Razor. Najwyraźniej dzieje się tak, ponieważ Razor nie może znaleźć bibliotek DLL, do których odwołuje się projekt. Rozwiązałem ten problem ustawiając „Kopiuj lokalnie” na true dla wszystkich bibliotek Smo, jednak może być lepsze rozwiązanie (patrz link Czechdude powyżej) Edycje @using i web.config są bezużyteczne, ponieważ są potrzebne tylko wtedy, gdy chcesz pominąć przestrzeń nazw część z nazw typów (na przykład Server zamiast Microsoft.SqlServer.Management.Smo.Server)
źródło
Otrzymałem podobny błąd po przeniesieniu mojej maszyny deweloperskiej z Win7 32bit na Win7 64bit. Komunikat o błędzie:
...\Web\Views\Login.cshtml: ASP.net runtime error: [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from System.Web.WebPages.Razor, Version=1.0.0.0 ... Type B originates from ... Version=2.0.0.0
Okazuje się, że miałem obie wersje w GAC-u. Widok
web.config
odwoływał się do wersji 1, ale aplikacja odwoływała się do wersji 2. Usunięto zestawy, do których istnieją odwołania, i ponownie dodano wersję 1. zSystem.Web.WebPages.Razor
itp.źródło
cóż, dla mnie było inaczej. Brakowało mi złożenia projektu aplikacji konsoli z projektem MVC. Tak więc dodanie referencji nie wystarczyło.
cóż, może to pomóc komuś innemu. przejdź do głównego pliku web.config
system.web
->compilation
-> dodaj odniesienie do projektu w ten sposób.<assemblies> <add assembly="Your.Namespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </assemblies>
źródło
Miałem też ten sam problem, ale problem dotyczył ramy docelowej zespołu .
Przywoływany zestaw znajdował się w programie .NET Framework 4.6, w którym projekt został ustawiony na platformę .NET Framework 4.5.
Mam nadzieję, że pomoże to komuś, kto pomylił się z frameworkami.
źródło
Twoja nazwa FOLDERU projektu musi być taka sama. Jeśli nazwa Twojego projektu lub rozwiązania jest inna, MVC cię skrzywdzi.
Przykład: Jeśli utworzysz nową aplikację i otrzyma ona domyślną nazwę Webapplicaiton1, zostanie utworzona ta przestrzeń nazw. Więc powiedzmy, że nie chcesz mieć tej przestrzeni nazw, więc z VS zmieniasz się wszędzie, gdzie widzisz, na „MyNamespace”. Wyszukujesz i zamieniasz cały kod z „Webapplication1” i zastępujesz go „MyNamespace”. Spowoduje to również zmianę pliku web.config, tak aby zawierał plik
Teraz wszystko będzie działać, z wyjątkiem widoków Razor.
RazorViews nie może go znaleźć, ponieważ istnieje jakaś dziwna zależność od FOLDERNAME projektu. To okropny projekt.
Przetestowałem to częściowo dokładnie, kopiując moje pliki do nowego rozwiązania, a jedyną różnicą jest nazwa folderu.
źródło
Spróbuj dodać przestrzeń nazw, w której się
MyClasses
znajdujesz, do pliku web.config w<pages> <namespaces></namespaces> </pages>
źródło
obejmują całą przestrzeń nazw
źródło
Żaden z tych https://stackoverflow.com/a/7597360/808128 nie działa dla mnie. Nawet „dodawanie odwołania do zestawu do sekcji system.web / compilation / assemblies w głównym pliku web.config”. Pozostają więc dla mnie dwa sposoby: 1) dodanie publicznej klasy zawijania dla mojego zestawu, do której kod Razor może uzyskać dostęp do tego zestawu za pośrednictwem tego zawijania; 2) po prostu dodaj logikę zestawu do klasy publicznej w tym samym zestawie, w którym znajduje się kod Razor.
źródło
Oprócz wprowadzania zmian w pliku web.config dla
<assemblies>
i<namespaces>
, odkryłem, że GAC-owanie zestawu spowodowało dużą różnicę. Możesz zastosować token klucza publicznego i kultury, tak jak każdy podstawowy zestaw .NET zarejestrowany globalnie.Niektórzy mogą wzdrygnąć się na wzmiankę o GAC. Ale jako programista BizTalk nauczyłem się tego.
źródło
To rozwiązanie zadziałało dla mnie (to zabawne, ale działa)
Edytowałem strony widoku i skopiowałem zawartość i wkleiłem w to, nie zmieniałem żadnej treści widoków, ale po prostu zredagowałem, aby studio wizualne mogło śledzić strony, a potem wszystko zaczęło działać
Rozwiązanie - po prostu edytuj strony i zamień na te same strony (działało dla mnie)
źródło
w modelach spacename, yourClassModel, dodaj public przed name class
źródło
W moim przypadku pakiet, którego próbowałem użyć, odwoływał się do standardu .net 2.1, podczas gdy mój projekt biblioteki klas maszynki do golenia był ustawiony na 2.0
źródło