2012-04-26 7 views
11

Ho un controllo server come classe all'interno dell'assembly MySite (ad esempio, il progetto del mio sito non contiene solo file aspx ma contiene anche controlli server a cui fanno riferimento i file aspx). Io uso il seguente codice all'interno di un file aspx:Riferimento ambiguo nello spazio nomi

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

del codice della classe è la seguente:

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

Il sito funziona e compila perfettamente, ma si rompe IntelliSense entro i figli di myid. La modifica dello spazio dei nomi all'interno della classe e della direttiva register su MySiteSC.misc risolve questo problema, sebbene l'utilizzo di MySite.miscSC non sia di aiuto. Né MySiteSCmiscSC vengono utilizzati altrove all'interno della mia soluzione e non esiste altra classe CustomACM all'interno di alcun spazio dei nomi.

ReSharper sottolinea "MySite" (ovvero, parte dello spazio dei nomi all'interno della direttiva registro) in rosso con tooltip, "La direttiva del registro non è utilizzata e può essere rimossa in modo sicuro \ n Riferimento ambiguo." Disabilitare ReSharper impedisce che questo errore venga visualizzato, ma non risolve il problema.

È possibile risolvere il problema senza modificare lo spazio dei nomi del controllo CustomACM (e senza spostare il controllo CustomACM in un altro assieme)?

+0

Si tratta di applicazioni Web e non un sito Web corretto?(non stai memorizzando i tuoi file cs in App_Code) – Peter

+0

Si tratta di un'applicazione Web e non sto utilizzando App_Code. – Brian

risposta

0

Controlla il tuo file web.config

<assemblies> 
... 
</assemblies> 

sezione per vedere se magari avete riferimenti duplicati a MySite.misc

+0

No, ci sono 0 riferimenti a MySite nei miei assembly web.config. Quando ne aggiungo uno, si risolve correttamente, ma non impedisce l'errore. – Brian

+0

Hai controllato i riferimenti sotto l'esploratore di proprietà per un elenco duplicato? – TheMoot

+0

Non ci sono elenchi duplicati. – Brian

1

per abilitare il controllo per essere utilizzato in modo dichiarativo in una pagina, è necessario associare tag prefisso allo spazio dei nomi del tuo controllo.

Nel progetto di controllo server personalizzato, è stato aggiunto l'attributo TagPrefixAttribute nel file AssemblyInfo.cs?

È necessario aggiungere questa riga alla fine del file per creare un mapping tra lo spazio dei nomi e il prefisso.

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

Aggiungi questa linea all'inizio del file:

Using System.Web.UI; 

Dopo aver fatto questo, ogni volta che si trascina un controllo server personalizzato dalla casella degli strumenti alla pagina aspx, VS dovrebbe aggiungere automaticamente la Direttiva del registro.

In alternativa, invece di utilizzare la direttiva del registro, è possibile specificare il prefisso del tag/il mapping dello spazio dei nomi nel file web.config se il controllo personalizzato verrà utilizzato in più pagine in un'applicazione Web.

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

Dopo aver fatto ciò, sono stato in grado di utilizzare la casella degli strumenti per trascinare un controllo CustomACM su una pagina. In questo modo è stata aggiunta automaticamente una direttiva di registro nella parte superiore della pagina, ma la direttiva del registro appena aggiunta ha risentito ancora del problema di riferimento ambiguo. – Brian

+1

hai risolto questo problema? Sto riscontrando lo stesso problema – ydd1987

+0

@ ydd1987: No, sto ancora utilizzando la soluzione che cito nella domanda originale (ad esempio, utilizzando uno spazio dei nomi diverso per il controllo interessato). – Brian

5

Resharper è bacato qui IMHO. Il problema può essere risolto cancellando le cache di ReSharper (ReSharper> Opzioni> Generali> Cancella cache), quindi riavvia VS e crea di nuovo. Il messaggio dovrebbe sparire allora. Lo so, questa non è una soluzione, ma funziona.

+0

Per il mio post originale, la disattivazione completa di ReSharper non risolve il problema. – Brian

+0

@Brian Cosa intendi con "Per il mio post originale"? Non riesco a vedere alcun suggerimento lì che hai disattivato ReSharper. Hai detto che ReSharper sottolinea MySite. Quindi è ancora sottolineato quando si disabilita ReSharper? O sto ricevendo qualcosa di sbagliato? – sprinter252

+1

Dal post originale: "Disabilitare ReSharper impedisce che questo errore venga visualizzato, ma non risolve il problema." Il problema è che "Il sito funziona e si compila perfettamente, ma IntelliSense si rompe all'interno dei figli di myID". – Brian