2008-11-12 8 views
28

Der Typ 'x' ist in einer Baugruppe definiert, auf die nicht verwiesen wird. Sie müssen der Baugruppe 'abc123' einen Verweis hinzufügen.Strange Error - CS0012: Der Typ x ist in einer Baugruppe definiert, die nicht referenziert wird.

Ich habe eine .NET 2.0 Webanwendung, die auf meine Assembly 'abc123' verweist. Die Assembly existiert in der GAC und ich habe überprüft, dass es die richtige (gleiche) Version ist. Der Rest der Anwendung hat keine Probleme außer für eine ASPX-Seite. Die betreffende Seite hat einen Repeater, der ein Benutzersteuerelement als eines seiner "Felder" anzeigt. Bei der Bindung passiere eine Liste von Typ Y mit dem Repeater I der Benutzer eine Liste von Typ-X-Kontrolle (eine Eigenschaft von y), wie hier gezeigt:

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

Auf der Objekt Benutzersteuerung, binde ich die Liste des Typs x zu einer Gridview in der Benutzersteuerung.

Eine seltsame Sache zu beachten ist, dass dieser Bericht auf meinem Entwicklungscomputer funktioniert, aber nicht auf irgendwelchen Servern, sobald ich bereitstellen. 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 Ihre Informationen.

Antwort

27

Ich bin Mike's Mitarbeiter, und wir haben eine Lösung erarbeitet.

Der Typ X ist in seiner Baugruppe definiert, also nur in der GAC. Obwohl seine ASP.NET-Webapplikation eine Referenz enthielt, konnte sie nur für dieses UserControl nicht vom GAC geladen werden. Der Rest der Anwendung funktionierte wie erwartet. Wir haben das fehlgeschlagene Laden bestätigt, indem wir eine Kopie der Assembly in das Verzeichnis bin gestellt haben und alles funktioniert hat. Wir haben die Baugruppe entfernt und das Problem kam zurück.

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

Es sieht so aus, als ob Sie jedes Mal, wenn Sie einen Typ auf der Seite referenzieren (nicht den Code-Behind), die in der Datei web.config oder in einer Seitenanweisung definierten Assemblierungsinformationen benötigen.

<assemblies> 
     <add assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/> 
</assemblies> 
3

gibt es auch ein Fehler, der sich mit ähnlichen Symptomen manifestieren kann, beschrieben here.

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

+1

Die Verbindung ist unterbrochen. –

0

Ich hatte genau den gleichen Fehler, aber ich hatte einen öffentlichen Konstruktor in meiner Klasse, die als Parameter ein Objekt aus einem anderen Projekt verwendet.

Ich löste das Problem, indem ich diesen Konstruktor intern machte.

0

Meistens ist es wegen der zwischengespeicherten Baugruppen. Eine Möglichkeit zur Lösung dieses Problems besteht darin, die "starke Referenz" in der proj- oder config-Datei zu machen. Siehe diesen Blog post

1

ich gefunden, wenn type x ist eigentlich eine Klasse in Ihrem App_Code, es zu beschmutzen und erneuten Speicher häufig zwingt den Web-App neu zu kompilieren und löst das Problem.