Неоднозначная ссылка в пространстве имен

У меня есть серверный элемент управления как класс в моей сборке MySite (т.е. мой проект сайта содержит не только файлы aspx, но также содержит элементы управления сервером, которые ссылаются на эти файлы aspx). Я использую следующий код в файле aspx:

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

Код класса выглядит следующим образом:

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

Сайт работает и компилируется отлично, но IntelliSense ломается внутри myID-детей. Изменение пространства имен внутри класса и директивы register на MySiteSC.misc исправляет это, хотя использование MySite.miscSC не помогает. Ни MySiteSC, ни miscSC не используется в другом месте моего решения, и никакой другой класс CustomACM не существует в любом пространстве имен.

ReSharper подчеркивает "MySite" (т.е. часть пространства имен в директиве register) красным цветом с помощью всплывающей подсказки: "Директива реестра не используется и может быть безопасно удалена \n Неоднозначная ссылка". Отключение ReSharper предотвращает появление этой ошибки, но не устраняет проблему.

Можно ли исправить эту проблему без изменения пространства имен элемента управления CustomACM (и без перемещения элемента управления CustomACM на другую сборку)?

Ответ 1

Resharper не работает здесь IMHO. Проблема может быть решена путем очистки кэшей ReSharper (ReSharper > Options > General > Clear Caches), а затем перезапустите VS и выполните сборку снова. Тогда сообщение должно исчезнуть. Я знаю, что это не решение, но оно работает.

Ответ 2

Чтобы разрешить использование элемента управления декларативно на странице, вы должны сопоставить префикс тега в пространстве имен управления.

В своем проекте пользовательского управления сервером вы добавили атрибут TagPrefixAttribute в свой файл AssemblyInfo.cs?

Вы должны добавить эту строку в конец файла, чтобы создать сопоставление между пространством имен и префиксом.

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

Добавьте эту строку в начало файла:

Using System.Web.UI;

После этого, всякий раз, когда вы перетаскиваете настраиваемый серверный элемент управления из панели инструментов на страницу .aspx, VS должен автоматически добавлять директиву Register.

В качестве альтернативы вместо использования директивы register вы можете указать отображение префикса/пространства имен тегов в файле web.config, если ваш пользовательский элемент управления будет использоваться на нескольких страницах в веб-приложении.

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

Ответ 3

Проверьте файл web.config

<assemblies>
...
</assemblies> 

чтобы узнать, есть ли у вас дубликаты ссылок на MySite.misc