it-swarm.com.de

Seltsamer Fehler - CS0012: Der Typ x ist in einer Assembly definiert, auf die nicht verwiesen wird

Der Typ 'x' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf Assembly 'abc123' hinzufügen.

Ich habe eine .NET 2.0-Webanwendung, die auf meine Assembly 'abc123' verweist. Die Assembly ist im GAC vorhanden und ich habe überprüft, dass es sich um die richtige (gleiche) Version handelt. Der Rest der Anwendung hat keine Probleme außer einer ASPX-Seite. Die betreffende Seite hat einen Repeater, der ein Benutzersteuerelement als eines seiner "Felder" anzeigt. Beim Binden einer Liste des Typs y an den Repeater übergebe ich dem Benutzer eine Liste des Typs x (eine Eigenschaft von y), wie hier gezeigt:

<uc1:usercontrol id="ucusercontrol " runat="server" myPublicUserControlProperty='<%#Eval("CollectionOfX") %>'/>

Im Eigenschaftensatz des Benutzersteuerelements binde ich die Liste des Typs x an eine Rasteransicht im Benutzersteuerelement.

Eine merkwürdige Sache ist, dass dieser Bericht auf meinem Entwicklungs-PC einwandfrei funktioniert, nicht jedoch auf einem Server, sobald ich ihn bereitgestellt habe. Mein PC ist Windows XP, IIS6, VS2005. Die Server sind Windows Server 2003, IIS6.

Ich hoffe, ich habe das gut genug erklärt. Vielen Dank im Voraus für jeden Einblick, den Sie geben können.

29
Mike T

Ich bin Mikes Mitarbeiter und wir haben eine Lösung gefunden.

Der Typ X ist in seiner Assembly definiert, dh nur in der GAC. Obwohl seine ASP.NET-Webanwendung über eine Referenz verfügte, konnte das GAC nur für dieses UserControl geladen werden. Der Rest der Anwendung funktionierte wie erwartet. Wir haben den fehlgeschlagenen Ladevorgang bestätigt, indem Sie eine Kopie der Assembly im bin-Verzeichnis abgelegt haben, und alles hat funktioniert. Wir haben die Versammlung entfernt und das Problem kam zurück. 

Unsere Lösung bestand darin, manuell einen Eintrag zur web.config im Abschnitt Assemblys hinzuzufügen, um ASP.NET auf den GAC zu verweisen. 

Wenn Sie auf einen Typ in der Seite verweisen (nicht auf den Code-behind), benötigen Sie die Assembly-Informationen, die in der Datei web.config oder in einer Seitenanweisung definiert sind.

<assemblies>
        <add Assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/>   
</assemblies>
28
Aaron Daniels

Es gibt auch einen Fehler, der sich mit ähnlichen Symptomen manifestieren kann, beschrieben hier .

Die Problemumgehung besteht darin, alles im Verzeichnis C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporäre ASP.NET-Dateien\zu löschen, und es scheint sich nur im Debug-Modus zu manifestieren.

4
Tom Lianza

Bei der Behebung solcher Probleme war der Fusion Log Viewer immer eine große Hilfe.

3
Maxam

Ich habe festgestellt, dass, wenn type x tatsächlich eine Klasse in Ihrem App_Code ist, dies durch Verschmutzung und erneutes Speichern der Web-App oft rekompiliert und das Problem gelöst wird.

1
Charbarred

Ich hatte genau den gleichen Fehler, aber ich hatte einen public - Konstruktor in meiner Klasse, der als Parameter ein Objekt aus einem anderen Projekt verwendete.

Ich habe das Problem gelöst, indem ich den Konstruktor intern gemacht habe.

0
Dan

Meistens liegt das an den zwischengespeicherten Baugruppen. Eine Möglichkeit, dieses Problem zu beheben, besteht darin, die "starke Referenz" in der Projekt- oder Konfigurationsdatei zu erstellen. Diesen Blog weiterleiten posten

0
Lav G

Für mich war es ein Versionskontrollproblem. 

Öffnen Sie in Visual Studio "Verweise" in Ihrem Projektmappen-Explorer und blättern Sie durch. 

Wenn etwas mit einem gelben Warndreieck versehen ist, merken Sie sich den Namen, entfernen Sie ihn und fügen Sie ihn wieder hinzu (oder lassen Sie ihn von ReSharper übernehmen). 

Ist mir mehrmals passiert, nachdem ich ein Projekt gezogen hatte, als ein Kollege ein neues Paket und Referenzen hinzugefügt hat.

0
Max Izrin