Beim Ausführen eines Webanwendungsprojekts kann eine Seite zu scheinbar zufälligen Zeiten mit einem CS0433-Fehler fehlschlagen: Typ ist in mehreren DLLs vorhanden. Die DLLs sind alle generierten DLLs, die sich im Verzeichnis "Temporäre ASP.NET-Dateien" befinden.
108
Dies kann passieren, wenn Sie CS-Dateien in App_Code ablegen und deren Erstellungsaktion so ändern, dass sie in einem Webanwendungsprojekt kompiliert werden.
Führen Sie entweder die Erstellungsaktion für die CS-Dateien in App_Code als Inhalt aus oder ändern Sie den Namen von App_Code in einen anderen Namen. Ich habe den Namen geändert, da Intellisense keine als Inhalt markierten CS-Dateien repariert.
Weitere Informationen unter http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html
quelle
Ein möglicher Grund für diesen Fehler ist, dass
inherits=
in der<@page language=......inherits=>
Zeile zwei Aspx-Seiten mit demselben Namen enthalten sind .Durch Ändern des
inherits=
Namens wird der Fehler behoben.quelle
Nur für den Fall, dass jemand anderes mein Problem teilt, wurde dieser Fehler angezeigt, als ich versuchte, eine Website eines neu verzweigten Projekts zu veröffentlichen. Der Build funktionierte einwandfrei.
Es stellte sich heraus, dass ich vergessen hatte, das Kontrollkästchen "Vorkompilierte Site aktualisieren lassen" unter " Veröffentlichungseinstellungen -> Vorkompilieren konfigurieren " zu entfernen .
quelle
Als weiteren Datenpunkt hatte ich gerade dieses Problem ohne Hinweise auf Zirkelverweise, wie in den Links in Bens Antwort beschrieben. Das Erstellen meines Website-Projekts würde mit einigen dieser Fehler fehlschlagen und durch Festlegen
compilation batch="false"
behoben, aber ich wollte diesen Weg nicht gehen, da dies eine große Produktionswebsite ist.Diese Lösung befand sich in einem Unterordner meines Ordners D: \ svn, den ich S: zugeordnet hatte. Beim Öffnen der Lösung über S: traten diese Fehler auf. Wenn ich jedoch direkt zu D: \ svn ging und die Lösung öffnete, traten keine Fehler auf.
Ich habe auch festgestellt, dass
compilation batch="true"
beim Öffnen der Lösung über das zugeordnete S: -Laufwerk trotz meiner web.config alle meine .ascx-Dateien in ihre eigenen Assemblys kompiliert werden. Wenn ich es vom physischen Speicherort aus öffne, werden die .ascx-Dateien in die Assemblys ihrer jeweiligen Ordner kompiliert (sobatch="true"
soll es funktionieren).Seltsam.
quelle
Dieser Fehler war auf einen Konflikt zwischen dem Klassennamen des Webformulars und dem wsdl-Stub (Code hinter der Datei .cs) mit demselben Klassennamen zurückzuführen, d. H.
ASPX-Seite: Dashboard-Klasse: Partiacl-Klasse Dashboard
AppCode / APIServices.cs: öffentliches Teilklassen-Dashboard
Der Fehler war nur beim Veröffentlichen der Website reproduzierbar, aber das Erstellen und Debuggen hat keinen Fehler gemeldet.
quelle
In meinem Fall hatte ich ein Projekt umbenannt, daher wurde auch die DLL umbenannt. Als ich gerade die neue DLL kopierte, aber nicht daran dachte, die alte vom Server zu löschen, hatte ich bald ein paar Klassenpaare mit demselben Namen. Das Löschen der veralteten DLLs war der Trick (aus gutem Grund).
quelle
Keine dieser Antworten hat bei mir funktioniert, aber ich habe das Problem behoben. Da ich die Bereitstellungsfunktion von VS zum Bereitstellen der Webanwendung verwendet habe, habe ich die Option zum Löschen aller vorhandenen Dateien vor dem Veröffentlichen im Assistenten zum Veröffentlichen von Web ausgewählt. Dies erzwang eine saubere Kopie der Anwendung und von dort aus funktionierte alles einwandfrei.
Diese Lösung kann hilfreich sein, wenn Ihre lokale Debugging-Kopie einwandfrei funktioniert, das veröffentlichte System jedoch nicht. Auch großartig, wenn Sie sich nicht die Zeit nehmen möchten, einzelne zu löschende DLLs aufzuspüren, und es Ihnen nichts ausmacht, dass die Produktionsdateien zuerst gelöscht werden.
quelle
In meinem Fall wurde das Problem durch Löschen aller Ausgabebaugruppen aus Bin-Ordnern in allen Projekten in der Lösung behoben. Leider habe ich keine Erklärung dafür.
quelle
In meinem Fall wurde das Problem behoben, als ich eine Designer.cs-Datei bearbeitete, die noch den doppelten Klassennamen hatte. Als ich die Klasse "logout" in "logout2" umbenannte, wurde sie in der Designer-Datei aus irgendeinem Grund nicht automatisch geändert und war immer noch "logout". Dieser Klassenname war bereits in einer vorkompilierten DLL in meinem Projekt vorhanden (das gehört dazu) zu einer Drittanbieter-Web-App, mit der ich arbeite und die ich entwickle).
quelle
Dieses Problem trat auf, wenn ein Teil einer Aspx-Seite in das separate Benutzersteuerelement eingefügt wurde. Auf meinem Computer war alles in Ordnung, auf dem Server ist ein Fehler aufgetreten.
Problemklasse und Datei umbenannt.
http://support.microsoft.com/kb/919284 Methode 2: Bei der Neuordnung der Ordner in der Anwendung wird über mögliche Zirkelverweise geschrieben
quelle
Keine dieser Lösungen hat bei mir funktioniert. Meine beiden widersprüchlichen DLLs befanden sich in C: \ ... \ AppData \ ... \ Temporäre ASP.NET-Dateien \ ...
Das Problem war, dass ich mein Quell-Repo auf eine frühere Version zurückgesetzt hatte - bevor wir einen Typ innerhalb derselben Lösung von einem Projekt in ein anderes Projekt verschoben haben.
Ich habe versucht, die neuere DLL - die in der älteren Codebasis überhaupt nicht vorhanden sein sollte - aus dem von msbuild angegebenen Speicherort "Temporäre ASP.NET-Dateien" zu löschen. msbuild hat es einfach zurückgesetzt.
Ich habe auch die Einstellung web.config ausprobiert, die einige hier erfolgreich verwendet haben, aber das hat auch nicht funktioniert. Obwohl ich beim Schreiben feststelle, dass sich tatsächlich zwei MVC-Projekte in derselben Lösung befanden und beide Fehler aufwiesen, bestand das Problem möglicherweise darin, dass ich die Einstellung nicht zu beiden hinzugefügt habe.
Ich habe versucht, mein Quell-Repo vorwärts zu rollen und zu reinigen und wieder zurückzurollen und zu reinigen. Nichts.
Ich habe versucht, den Speicherort "Temporäre ASP.NET-Dateien" vollständig zu löschen. msbuild hat es einfach wieder zurückgesetzt.
Schließlich habe ich versucht, in Visual Studio neu zu erstellen. Obwohl sowohl die Befehlszeilenausgabe als auch die Ausgabe "Fehler" denselben msbuild-Fehler "Temporäre ASP.NET-Dateien" aufwiesen, beschwerte sich der Intellisense-Fehler beim Bewegen des Mauszeigers über den Konflikttyp tatsächlich über DLLs in Ausgabeverzeichnissen. Anscheinend haben "Clean" und "Rebuild" ihre Arbeit nicht gemacht. Ich habe die DLLs in den von Intellisense identifizierten Ausgabeverzeichnissen manuell gelöscht, und das Problem wurde behoben.
tl; dr - Stellen Sie sicher, dass Sie alle Ihre web.configs mit der Batch-Einstellung abdecken, und versuchen Sie, Intellisense für weitere Hinweise zu nutzen.
quelle
Mein Problem war mit einer DLL verknüpft, die in meinem Projektordner generiert wurde.
Wenn Sie auf eine andere Datei verweisen, anstatt alles zu tun, was Sie oben sehen, wurde mein Problem sofort behoben, indem nur die DLL gelöscht wurde, die sich in meinem Verzeichnis / bin für mein Projekt befand.
Das Problem ist nicht unbedingt ein web.config-Fix - es ist ein Zirkelverweis, der gelöst werden muss. Ich habe festgestellt, dass ich die alte DLL in meiner ursprünglichen Projektdatei gelöscht habe, aber nicht in dem Projekt, das darauf verweist.
Ich empfehle nicht, die Änderung an Ihrer web.config-Datei vorzunehmen, da dies nur eine Band-Aid-Korrektur ist und das eigentliche Problem nicht wirklich angeht. Tun Sie dies, wenn Sie keine Lust haben, das Problem zu beheben, aber wenn Sie zukünftige Kopfschmerzen vermeiden möchten, entfernen Sie einfach die DLL von beiden Stellen.
quelle
Ich hatte eine gleichnamige Teilklasse in zwei verschiedenen Projekten. Ich habe es gelöst, indem ich es nur in einem Projekt belassen habe.
quelle
Manchmal kann es hilfreich sein, die Lösung zu entfernen und erneut zu erstellen. Da diese Verwendung bei der Konvertierung von VS2005 auf vs2010 auftritt, bleiben einige Verweise auf Framework 4.0 (nach dem Upgrade) in der Lösung erhalten, selbst alle Projekte sind als 3.5 definiert.
Normalerweise sollte das Wiederherstellen der Lösung diese Probleme beheben.
quelle
Ich hatte das gleiche Problem, als ich die Anwendung auf einem Kompilierungsserver kompilierte.
Mein Controller hatte einen einfachen statischen Code, also habe ich meinen ASCX geändert:
Zu
Entfernen Sie außerdem das Teilschlüsselwort aus dem Codebehind und fügen Sie dem Codebehind einen Namespace hinzu.
Dies:
Dazu:
Und das hat bei mir funktioniert.
quelle
Für mich geschah dies, als ich meinen PrecompiledWeb / Publish-Speicherort auf das aktuelle Verzeichnis eingestellt hatte, in dem sich auch der Stammordner der Site befand.
Meine Website sah dann den Veröffentlichungsordner als Teil des Projekts beim Kompilieren / Erstellen und fand dann Duplikate auf diese Weise.
dh Legen Sie die veröffentlichte / vorkompilierte Version Ihrer Site nicht in den Codeordnern Ihrer Site ab.
quelle
Wenn die DLLs in einem temporären Ordner angezeigt werden, sollten Sie versuchen, Ihre Lösung zu bereinigen.
quelle
Poste meine Lösung:
Das Problem hing mit dem "On-Access-Scan" von Mcafee Antivirus zusammen. Durch Deaktivieren wurde das Problem behoben. Irgendwie wurde der temporäre ASP-Ordner von ASP nicht ordnungsgemäß verwendet, als das Antivirenprogramm aktiviert war.
Hoffe das hilft jemandem.
quelle
Der Ordner App_Code verursacht das Problem. Platzieren Sie die Klasse außerhalb des Ordners (funktioniert einwandfrei).
Der Ordner App_Code ist nicht für Webanwendungsprojekte vorgesehen
http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html
quelle
Gehen Sie zu Referenz hinzufügen und suchen Sie nach beiden DLLs. Beide DLLs hätten aktiviert, deaktivieren Sie eine der DLLs, da Verweise auf dieselbe DLL mit unterschiedlichen Versionsmehrdeutigkeiten generiert werden.
quelle
Meine Lösung bestand darin, CodePage = "...." durch CodeBehind = "..." in der ASPX-Datei zu ersetzen. Irgendwie wurde es während einer Migration von früheren .NET-Versionen als CodePage belassen. Diese Seitenanweisung erstellt eine weitere DLL-Datei, die mit der DLL-Datei des Projekts in Konflikt steht.
quelle
Keine dieser Lösungen hat bei mir funktioniert. Das Kompilieren im "Release" -Modus hat funktioniert, aber als ich zu "Debug" gewechselt bin, habe ich unzählige dieser Fehlermeldungen erhalten.
Ich verstehe nicht warum, aber ein einfacher Neustart von Visual Studio war meine Lösung.
quelle
Ich war mit dem Problem in der Kompilierungszeit konfrontiert.
Ich bin mit den Attributen batch = "true" einverstanden. Der Fehler weist darauf hin, dass 2 Assemblys vorhanden sind
Lösung 1: Löschen eines davon
Lösung 2: Konfigurieren Sie eine davon
quelle