2012-04-26 4 views
11

Ich habe eine Serversteuerung als eine Klasse innerhalb meiner MySite Assembly (d. H. Das Projekt meiner Website enthält nicht nur aspx-Dateien, sondern enthält auch Serversteuerelemente, auf die diese Aspx-Dateien verweisen). Ich verwende den folgenden Code in einer aspx-Datei:Mehrdeutige Referenz im Namespace

<%@ Register Assembly="MySite" Namespace="MySite.misc" TagPrefix="TAC" %> 
... 
<TAC:CustomACM ID="myID" runat="server" /> 

Der Code der Klasse ist wie folgt:

namespace MySite.misc 
{ 
    public class CustomACM : AutoCompleteExtender, INamingContainer 
    { 
     //... 
    } 
} 

Die Website arbeitet und kompiliert perfekt, aber IntelliSense Umbrüche innerhalb myID der Kinder. Das Ändern des Namespace innerhalb der Klasse und der Registerdirektive auf MySiteSC.misc behebt dies, obwohl die Verwendung von MySite.miscSC nicht hilft. Weder MySiteSC noch miscSC wird an anderer Stelle in meiner Lösung verwendet, und keine andere CustomACM Klasse existiert in einem beliebigen Namespace.

ReSharper unterstreicht "MySite" (d. H. Einen Teil des Namespace innerhalb der Register-Direktive) in Rot mit QuickInfo, "Register Direktive ist unbenutzt und kann sicher entfernt werden \ n Mehrdeutige Referenz." Das Deaktivieren von ReSharper verhindert, dass dieser Fehler angezeigt wird, behebt das Problem jedoch nicht.

Kann ich dieses Problem beheben, ohne den Namespace des CustomACM-Steuerelements zu ändern (und ohne das CustomACM-Steuerelement auf eine andere Assembly zu verschieben)?

+0

gelöst Dies ist Web Application und nicht korrekt eine Web-Site?(Sie speichern Ihre CS-Dateien nicht in App_Code) – Peter

+0

Es ist eine Webanwendung und ich verwende App_Code nicht. – Brian

Antwort

0

Prüfen Sie die Datei web.config

<assemblies> 
... 
</assemblies> 

Abschnitt zu sehen, ob vielleicht Sie MySite.misc

+0

Nein, in meinen web.config-Assemblys gibt es 0 Verweise auf MySite. Wenn ich einen hinzufüge, löst es richtig, aber verhindert den Fehler nicht. – Brian

+0

Haben Sie Referenzen unter Property Explorer für eine doppelte Auflistung überprüft? – TheMoot

+0

Es gibt keine doppelten Einträge. – Brian

1

doppelte Referenzen haben Ihre Kontrolle zu aktivieren deklarativ auf einer Seite verwendet werden soll, müssen Sie eine Karte Kennzeichnen Sie den Namespace Ihres Steuerelements mit einem Präfix.

In Ihrem benutzerdefinierten Serversteuerprojekt haben Sie das Attribut TagPrefixAttribute in Ihrer Datei AssemblyInfo.cs?

Sie müssen diese Zeile am Ende der Datei hinzufügen, um eine Zuordnung zwischen dem Namespace und dem Präfix zu erstellen.

[assembly: TagPrefix("MySite.misc", "TAC")] 

Fügen Sie diese Zeile am Anfang der Datei:

Using System.Web.UI; 

Nachdem Sie das tun, wenn Sie einen benutzerdefinierten Server-Steuerelement aus der Toolbox auf die ASPX-Seite ziehen, VS automatisch die hinzufügen sollte Registrieren Sie die Richtlinie.

Alternativ können Sie anstelle der register-Direktive die Tag-Präfix-/Namespace-Zuordnung in der Datei web.config angeben, wenn Ihr benutzerdefiniertes Steuerelement auf mehreren Seiten in einer Webanwendung verwendet wird.

<?xml version="1.0"?> 
<configuration> 
    <system.web>  
    <pages> 
    <controls> 
     <add tagPrefix="TAC" Assembly="MySite" 
     namespace="MySite.misc"> 
     </add> 
    </controls> 
    </pages> 
    </system.web> 
</configuration> 
+0

Danach konnte ich mit der Toolbox ein CustomACM-Steuerelement auf eine Seite ziehen. Dadurch wurde automatisch eine Register-Direktive oben auf der Seite hinzugefügt, aber die neu hinzugefügte Register-Direktive litt immer noch unter dem mehrdeutigen Referenzproblem. – Brian

+1

haben Sie dieses Problem gelöst? Ich habe das gleiche Problem – ydd1987

+0

@ ydd1987: Nein, ich verwende immer noch die Problemumgehung, die ich in der ursprünglichen Frage erwähnt (d. H. Mit einem anderen Namespace für das betroffene Steuerelement). – Brian

5

Resharper ist Buggy hier IMHO. Das Problem kann gelöst werden, indem die Caches von ReSharper gelöscht werden (ReSharper> Optionen> Allgemein> Cache löschen), dann VS neu gestartet und erneut erstellt wird. Die Nachricht sollte dann verschwinden. Ich weiß, dass dies keine Lösung ist, aber es funktioniert.

+0

Pro meiner ursprünglichen Post, ReSharper vollständig zu deaktivieren, behebt das Problem nicht. – Brian

+0

@Brian Was meinst du mit "Per my original post"? Ich sehe keinen Hinweis darauf, dass Sie ReSharper deaktiviert haben. Du hast gesagt, dass ReSharper MySite unterstreicht. So ist es immer noch unterstrichen, wenn Sie ReSharper deaktivieren? Oder bekomme ich etwas falsch? – sprinter252

+1

Aus dem ursprünglichen Post: "Deaktivieren von ReSharper verhindert, dass dieser Fehler angezeigt wird, behebt das Problem jedoch nicht." Das Problem ist, "Die Website funktioniert und kompiliert perfekt, aber IntelliSense bricht innerhalb der myIDs Kinder." – Brian