Неоднозначная ссылка в пространстве имен
У меня есть серверный контроль как класс в моем 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" (т. Е. Часть пространства имен в директиве регистра) красным с помощью всплывающей подсказки: "Директива регистра не используется и может быть безопасно удалена \n Неоднозначная ссылка". Отключение ReSharper предотвращает появление этой ошибки, но не решает проблему.
Можно ли исправить эту проблему без изменения пространства имен элемента управления CustomACM (и без перемещения элемента управления CustomACM в другую сборку)?
4 ответа
Решарпер глючит здесь ИМХО. Эту проблему можно решить, очистив кеши ReSharper (ReSharper > Параметры> Общие> Очистить кеши), затем перезапустив VS и собрав заново. Сообщение должно исчезнуть тогда. Я знаю, что это на самом деле не решение, но оно работает.
Чтобы разрешить декларативное использование элемента управления на странице, необходимо сопоставить префикс тега с пространством имен элемента управления.
В свой пользовательский проект управления сервером вы добавили 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>
Проверьте ваш файл web.config
<assemblies>
...
</assemblies>
раздел, чтобы увидеть, если у вас есть повторяющиеся ссылки на MySite.misc
Я решил похожую проблему, удалив .suo
-file (Файл параметров пользователя решения (.Suo))