2012-04-26 21 views
11

Mam kontrolę serwera jako klasę w moim zespole MySite (tzn. Projekt mojej witryny zawiera nie tylko pliki aspx, ale także zawiera elementy sterujące serwera, do których odwołują się te pliki aspx). I użyć następującego kodu w pliku aspx:Niejednoznaczne odwołanie w przestrzeni nazw

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

kod klasy jest następujący:

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

Witryna kompiluje i działa doskonale, ale przerwy IntelliSense zasięgu dzieci myid użytkownika. Zmiana przestrzeni nazw w klasie i dyrektywie rejestru na MySiteSC.misc rozwiązuje ten problem, chociaż użycie polecenia MySite.miscSC nie pomaga. Ani MySiteSC ani miscSC nie jest używany w innym miejscu mojego rozwiązania, a żadna inna klasa CustomACM nie istnieje w żadnej przestrzeni nazw.

ReSharper podkreśla "MySite" (tj. Część przestrzeni nazw w dyrektywie rejestru) na czerwono z etykietą narzędzia, "Dyrektywa rejestracyjna nie jest używana i można ją bezpiecznie usunąć \ n Niejednoznaczne odniesienie." Wyłączenie ReSharpera zapobiega wyświetlaniu tego błędu, ale nie rozwiązuje problemu.

Czy mogę rozwiązać ten problem, nie zmieniając obszaru nazw formantu CustomACM (i bez przenoszenia kontrolki CustomACM do innego zestawu)?

+0

To Web Application, a nie strony WWW są prawidłowe?(nie przechowujesz swoich plików cs w kodzie App) – Peter

+0

Jest to aplikacja internetowa i nie używam App_Code. – Brian

Odpowiedz

0

sprawdzić plik web.config

<assemblies> 
... 
</assemblies> 

sekcję, aby zobaczyć, czy może masz duplikaty odniesień do MySite.misc

+0

Nie, w moich zestawach web.config znajduje się 0 odwołań do MySite. Kiedy dodaję jeden, to działa poprawnie, ale nie zapobiega błędowi. – Brian

+0

Czy sprawdziłeś odwołań w eksploratorze właściwości dla duplikatu aukcji? – TheMoot

+0

Nie ma duplikatów aukcji. – Brian

1

aby włączyć kontrolę być stosowane deklaratywnie na stronie, należy zmapować prefiks tagu do przestrzeni nazw kontrolki.

Czy w projekcie niestandardowej kontroli serwera dodano atrybut TagPrefixAttribute do pliku AssemblyInfo.cs?

Trzeba dodać tę linię na końcu pliku, aby utworzyć mapowanie między przestrzenią nazw a prefiksem.

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

Dodaj ten wiersz na początku pliku:

Using System.Web.UI; 

Po to zrobić, kiedy tylko przeciągnij formant serwera zwyczaj z przybornika do strony aspx, VS powinien automatycznie dodać Zarejestruj dyrektywę.

Alternatywnie, zamiast korzystać z dyrektywy rejestracyjnej, można określić przedrostek znacznika/mapowanie przestrzeni nazw w pliku web.config, jeśli niestandardowy formant będzie używany na wielu stronach w aplikacji internetowej.

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

Po wykonaniu tej czynności udało mi się użyć przybornika do przeciągnięcia kontrolki CustomACM na stronę. Spowoduje to automatyczne dodanie dyrektywy rejestru na górze strony, ale nowo dodana dyrektywa rejestru nadal cierpi z powodu niejednoznacznego problemu referencyjnego. – Brian

+1

Czy rozwiązałeś ten problem? Mam ten sam problem: – ydd1987

+0

@ ydd1987: Nie, nadal używam obejścia, o którym wspomniałem w pierwotnym pytaniu (tj. Używam innej przestrzeni nazw dla kontrolki, której dotyczy problem). – Brian

5

Resharper jest wadliwy tutaj IMHO. Problem można rozwiązać, czyszcząc pamięci podręczne ReSharper (ReSharper> Opcje> Ogólne> Wyczyść pamięci podręczne), a następnie ponownie uruchamiając VS i buduj ponownie. Wiadomość powinna zniknąć. Wiem, że to nie jest rozwiązanie, ale działa.

+0

Zgodnie z moim oryginalnym wpisem wyłączenie ReSharpera w całości nie rozwiązuje problemu. – Brian

+0

@Brian Co masz na myśli mówiąc "Per my original post"? Nie widzę żadnej wskazówki, że wyłączyłeś ReSharper. Powiedziałeś, że ReSharper podkreśla MySite. Czy nadal jest podkreślony, gdy wyłączasz ReSharper? Czy mam coś złego? – sprinter252

+1

Z oryginalnego posta: "Wyłączenie ReSharpera zapobiega wyświetlaniu tego błędu, ale nie rozwiązuje problemu." Problem polegał na tym, że "strona działa i kompiluje się idealnie, ale IntelliSense łamie się u dzieci myID". – Brian

Powiązane problemy