ASP.Net-Fehler: "Der Typ 'foo' existiert sowohl in" temp1.dll "als auch in" temp2.dll ".


108

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.

Antworten:


135

Fügen Sie das Attribut batch = "false" zum Element "compilation" der Datei "web.config" hinzu.

Dieses Problem tritt aufgrund der Art und Weise auf, in der ASP.NET 2.0 die Anwendungsreferenzen und die Ordnerstruktur der Anwendung zum Kompilieren der Anwendung verwendet. Wenn die Batch-Eigenschaft des Elements in der Datei web.config für die Anwendung auf true festgelegt ist, kompiliert ASP.NET 2.0 jeden Ordner in der Anwendung in einer separaten Assembly.

http://www.sellsbrothers.com/1995

http://support.microsoft.com/kb/919284


Mann, danke dafür. Ich habe mich heute bemüht, dies in einer Produktionsstätte zu beheben. Ich weiß noch nicht, was es verursacht hat (hat so lange gut funktioniert!), Aber das hat das Problem für uns behoben.
Matt

Vielen Dank. Das funktioniert. Wachte heute Morgen mit diesem Fehler auf. MEIN ISP discountasp.net muss etwas geändert haben. Wenn dieser Beitrag nicht wäre, hätte ich immer noch den Fehler. Daumen runter für meinen ISP.
Damon

3
Hilfreiche Antwort - Syntax ist hier: <compilation ... batch = "false" />
Catto

1
Beachten Sie diese Warnung: "Diese Methode wird nur für kleine Anwendungen empfohlen. Dies führt zu einer Speicherfragmentierung."
ThatMatthew

22

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


11

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.


2
Dies hat mein Problem gelöst. Das Kopieren / Einfügen einer Benutzersteuerung scheint etwas schwierig zu sein, wenn Sie den Code nicht benötigen, um etwas zu tun.
Grubsnik

8

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 .


4

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 (so batch="true"soll es funktionieren).

Seltsam.


4

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.


2

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).


2

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.


2

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.


1

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).


Wenn Sie einen neuen Weg finden, um die Fehlermeldung zu verursachen, können Sie ihn gerne hinzufügen :)
Ben Fulton

1

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


1

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.


1

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.


1

Ich hatte eine gleichnamige Teilklasse in zwei verschiedenen Projekten. Ich habe es gelöst, indem ich es nur in einem Projekt belassen habe.


0

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.


0

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:

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

Zu

 <%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

Entfernen Sie außerdem das Teilschlüsselwort aus dem Codebehind und fügen Sie dem Codebehind einen Namespace hinzu.

Dies:

using System;
using System.Web.UI;

/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

Dazu:

using System;
using System.Web.UI;

namespace Controles
{
    /// <summary>
    /// My controller
    /// </summary>
    public class controllerName : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

Und das hat bei mir funktioniert.


0

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.


0

Wenn die DLLs in einem temporären Ordner angezeigt werden, sollten Sie versuchen, Ihre Lösung zu bereinigen.


0

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.


Wussten Sie warum? Mein Team hat auch dieses Problem, und sie sagen, es liegt an McAfee. Aufgrund der IT-Regeln des Unternehmens können wir Antivirenprogramme jedoch nicht deaktivieren (was nicht stören sollte!).
Kat Lim Ruiz

Wir arbeiten immer noch daran, die genaue Ursache zu finden. Leider löst das Ausschließen des temporären ASP-Ordners vom On-Access-Scan das Problem nicht dauerhaft.
Adrian Nasui


0

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.


0

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.


0

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.


0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.