Podczas uruchamiania projektu aplikacji internetowej w pozornie przypadkowych momentach strona może się nie powieść z błędem CS0433: typ istnieje w wielu bibliotekach DLL. Wszystkie biblioteki DLL są generowanymi plikami DLL znajdującymi się w katalogu „Temporary ASP.NET Files”.
108
Może się tak zdarzyć, jeśli umieścisz pliki .cs w App_Code i zmienisz ich akcję kompilacji na kompilację w projekcie aplikacji sieci Web.
Ustaw akcję kompilacji dla plików .cs w App_Code jako zawartość lub zmień nazwę App_Code na coś innego. Zmieniłem nazwę, ponieważ Intellisense nie naprawi plików .cs oznaczonych jako zawartość.
Więcej informacji na http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html
źródło
Jedną z możliwych przyczyn tego błędu jest to, że
inherits=
w<@page language=......inherits=>
wierszu znajdują się 2 strony aspx, które mają tę samą nazwę .Zmiana
inherits=
nazwy rozwiązuje błąd.źródło
Na wypadek, gdyby ktoś inny podzielił mój problem, otrzymałem ten błąd, gdy próbowałem opublikować witrynę sieci Web nowo rozgałęzionego projektu, kompilacja działała idealnie.
Okazuje się, że zapomniałem usunąć pole wyboru „Zezwól na aktualizację prekompilowanej witryny” w Ustawieniach publikowania -> Konfiguruj prekompilację .
źródło
Jako kolejny punkt danych, po prostu miałem ten problem bez żadnych dowodów cyklicznych odniesień, jak opisano w linkach w odpowiedzi Bena. Zbudowanie projektu witryny sieci Web zakończy się niepowodzeniem z powodu kilku z tych błędów i ustawień
compilation batch="false"
go naprawiło, ale nie chciałem iść tą drogą, ponieważ jest to duża witryna produkcyjna.To rozwiązanie znajdowało się w podfolderze mojego folderu D: \ svn, który zamapowałem na S :. Kiedy otworzyłem rozwiązanie z S :, te błędy wystąpiły, ale jeśli poszedłem prosto do D: \ svn i otworzyłem rozwiązanie, żadnych błędów.
Zauważyłem również, że pomimo posiadania
compilation batch="true"
w moim web.config, podczas otwierania rozwiązania z zmapowanego S: drive wszystkie moje pliki .ascx są kompilowane do własnych zestawów. Jeśli otworzę go z fizycznej lokalizacji, pliki .ascx zostaną skompilowane do odpowiednich zestawów folderów (i takbatch="true"
powinno działać).Dziwne.
źródło
Ten błąd był spowodowany konfliktem między nazwą klasy formularza internetowego a kodem wsdl (kod związany z plikiem .cs) o tej samej nazwie klasy, tj.
Strona ASPX: Dashboard Class: partiacl class Dashboard
AppCode / APIServices.cs: publiczny panel klasy częściowej
Błąd można było odtworzyć tylko po opublikowaniu strony internetowej, ale kompilacja i debugowanie nie spowodowały żadnego błędu.
źródło
W moim przypadku zmieniłem nazwę projektu, więc również dll została zmieniona. Kiedy właśnie skopiowałem nową bibliotekę dll, ale nie pomyślałem o usunięciu starej z serwera, wkrótce miałem kilka par klas o tych samych nazwach. Usunięcie przestarzałych bibliotek dll działało (z przyczyny).
źródło
Żadna z tych odpowiedzi nie działała dla mnie, jednak udało mi się rozwiązać problem. Ponieważ korzystałem z funkcji publikowania VS do wdrażania aplikacji internetowej, wybrałem opcję usunięcia wszystkich istniejących plików przed opublikowaniem w kreatorze publikowania w sieci Web. To wymusiło czystą kopię aplikacji i wszystko działało dobrze.
To rozwiązanie może być pomocne, jeśli lokalna kopia debugowania działa dobrze, ale opublikowany system nie. Świetnie również, jeśli nie chcesz poświęcać czasu na wyśledzenie poszczególnych bibliotek dll do usunięcia i nie przeszkadza Ci to, że pliki produkcyjne są najpierw usuwane.
źródło
W moim przypadku usunięcie wszystkich zestawów wyjściowych z folderów bin we wszystkich projektach w rozwiązaniu rozwiązało problem. Niestety nie mam na to żadnego wytłumaczenia.
źródło
W moim przypadku problem został rozwiązany, kiedy edytowałem plik Designer.cs, który nadal miał zduplikowaną nazwę klasy. z jakiegoś powodu, kiedy zmieniłem nazwę klasy „logout” na „logout2”, w pliku projektanta nie została ona automatycznie zmieniona i nadal była „wylogowana”, a ta nazwa klasy już istniała w prekompilowanej bibliotece dll w moim projekcie (to należy do aplikacji internetowej innej firmy, z którą pracuję i wokół której rozwijam).
źródło
Masz ten problem, gdy umieścisz część strony aspx w oddzielnej kontrolce użytkownika. Na moim komputerze wszystko było w porządku, na serwerze pojawił się błąd.
Zmieniono nazwę klasy i pliku problemu.
http://support.microsoft.com/kb/919284 Metoda 2: Zmień kolejność folderów w aplikacji zawiera opis możliwych odwołań cyklicznych
źródło
Żadne z tych rozwiązań nie działało dla mnie. Obie moje konflikty DLL znajdowały się w C: \ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...
Problem polegał na tym, że przywróciłem moje repozytorium źródłowe do wcześniejszej wersji - zanim przenieśliśmy typ z jednego projektu do innego projektu w ramach tego samego rozwiązania.
Próbowałem usunąć nowszą bibliotekę DLL - której w ogóle nie powinno być w starszej bazie kodu - z lokalizacji „Temporary ASP.NET Files” zidentyfikowanej przez msbuild. msbuild po prostu go odłożył.
Wypróbowałem również ustawienie web.config, którego niektórzy tutaj używali z powodzeniem, ale to też nie działa. Chociaż, pisząc to, zdaję sobie sprawę, że faktycznie były dwa projekty MVC w ramach tego samego rozwiązania i oba zawierały błędy, więc problem mógł polegać na tym, że nie dodałem ustawienia do obu.
Próbowałem przetoczyć repozytorium źródła do przodu, wyczyścić i ponownie przetoczyć i wyczyścić. Nic.
Próbowałem usunąć wszystko z lokalizacji „Temporary ASP.NET Files”. msbuild po prostu włóż go ponownie.
Wreszcie spróbowałem przebudować w Visual Studio. Chociaż dane wyjściowe wiersza polecenia i dane wyjściowe „Błędy” wskazywały ten sam błąd programu MSBuild „Tymczasowe pliki ASP.NET”, błąd Intellisense - podczas najeżdżania kursorem myszy na typ będący w konflikcie - w rzeczywistości zgłaszał problem dotyczący bibliotek DLL w katalogach wyjściowych. Najwyraźniej „Clean” i „Rebuild” nie wykonywały swojej pracy. Ręcznie usunąłem biblioteki DLL w katalogach wyjściowych zidentyfikowanych przez Intellisense i problem został rozwiązany.
tl; dr - Upewnij się, że wszystkie pliki web.config są objęte ustawieniem wsadowym i spróbuj wykorzystać Intellisense w celu uzyskania dalszych wskazówek.
źródło
Mój problem był powiązany z plikiem .dll, który był generowany w folderze mojego projektu.
Jeśli odwołujesz się do innego pliku, zamiast robić wszystko, co widzisz powyżej, tym, co natychmiast rozwiązało mój problem, było po prostu usunięcie pliku .dll, który znajdował się w moim katalogu / bin dla mojego projektu.
Problem niekoniecznie jest związany z poprawką w pliku web.config - jest to odwołanie cykliczne, które należy rozwiązać. Zdałem sobie sprawę, że wyczyściłem stary plik .dll w moim oryginalnym pliku projektu, ale nie w projekcie, do którego się odwoływał.
Nie polecam dokonywania modyfikacji w pliku web.config, ponieważ jest to tylko naprawa zespołu, która nie rozwiązuje rzeczywistego problemu. Zrób to, jeśli nie masz ochoty naprawiać problemu, ale jeśli chcesz uniknąć przyszłych bólów głowy, po prostu usuń plik .dll z obu miejsc.
źródło
Miałem zajęcia częściowe o tej samej nazwie w dwóch różnych projektach. Rozwiązałem to, zostawiając go tylko w jednym projekcie.
źródło
Czasami może pomóc usunięcie rozwiązania i utworzenie go ponownie. Ponieważ takie użycie ma miejsce po konwersji z VS2005 na vs2010, niektóre odniesienia do frameworka 4.0 (po aktualizacji) pozostają w rozwiązaniu, nawet wszystkie projekty są zdefiniowane jako 3.5.
Zwykle odbudowanie rozwiązania powinno rozwiązać te problemy.
źródło
Miałem ten sam problem, kiedy kompilowałem aplikację na serwerze kompilującym.
Mój kontroler miał prosty kod statyczny, więc zmieniłem mój ascx:
Do
Usunięto również częściowe słowo kluczowe z elementu codebehind i dodano przestrzeń nazw do elementu codebehind.
To:
Do tego:
I to zadziałało dla mnie.
źródło
U mnie stało się tak, gdy moja lokalizacja PrecompiledWeb / Publish była ustawiona na bieżący katalog, w którym znajdował się również folder główny witryny.
Moja witryna sieci Web widziała wtedy folder publikowania jako część projektu podczas kompilowania / budowania, a następnie znajdowała duplikaty w ten sposób.
tj. Nie umieszczaj opublikowanej / wstępnie skompilowanej wersji witryny w folderach z kodem witryny.
źródło
Jeśli biblioteki DLL są wyświetlane w folderze tymczasowym, spróbuj wyczyścić rozwiązanie.
źródło
Publikowanie mojego rozwiązania:
Problem był związany ze „Skanowaniem na bieżąco” programu Mcafee Antivirus. Wyłączenie tego rozwiązało problem. W jakiś sposób folder tymczasowy ASP nie był prawidłowo używany przez ASP, gdy program antywirusowy był włączony.
Mam nadzieję, że to komuś pomoże.
źródło
Folder App_Code powoduje problem, umieść klasę poza folderem (działa dobrze)
Folder App_Code nie jest przeznaczony dla projektów aplikacji sieci Web
http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html
źródło
Idź do Dodaj odniesienie i wyszukaj obie biblioteki dll, obie biblioteki dll byłyby zaznaczone, odznacz jedną z bibliotek dll, ponieważ są generowane odwołania do tej samej biblioteki dll z różną niejednoznacznością wersji.
źródło
Moim rozwiązaniem było zastąpienie CodePage = "...." kodem CodeBehind = "..." w pliku .aspx. W jakiś sposób pozostał jako CodePage podczas migracji z poprzednich wersji .NET. Ta dyrektywa strony tworzy inny plik dll, który powoduje konflikt z plikiem dll projektu.
źródło
Żadne z tych rozwiązań nie zadziałało. Kompilacja w trybie „Release” działała, ale kiedy przełączyłem się na „Debug”, otrzymałem wiele komunikatów o błędach.
Nie rozumiem dlaczego, ale moim rozwiązaniem było proste ponowne uruchomienie programu Visual Studio .
źródło
Miałem problem w czasie kompilacji.
I zgadzam się z partii = „true” atrybuty, błąd mówi istnieją 2 Montaż
Rozwiązanie 1: usunięcie jednego z nich
Rozwiązanie 2: Skonfiguruj jeden z nich
źródło