Ошибка времени выполнения ASP.NET: найдено неоднозначное совпадение - PullRequest
18 голосов
/ 24 августа 2009

Недавно моя команда преобразовала проект ASP.NET из .NET 1.1 в .NET 2.0. Пока все хорошо, кроме одной веб-страницы.

Это сообщение об ошибке, которое я получил при попытке открыть эту страницу:

Ошибка сервера в «/» приложении.

Parser Error Description: Ошибка произошло во время разбора ресурс, необходимый для обслуживания этого запрос. Пожалуйста, просмотрите следующее конкретные подробности ошибки разбора и измените свой исходный файл соответствующим образом.

Сообщение об ошибке парсера: неоднозначное совпадение найдено.

Ошибка источника:

Строка 1: <% @ Control Language = "c #" AutoEventWireup = "ложь" Codebehind = "Template.ascx.cs" Inherits = "eReq.Web.WebControls.Template.Template" TargetSchema = "http://schemas.microsoft.com/intellisense/ie5" %> Строка 2: Строка 3: функция ExpandCollapse_Template (inBtn, inSection, inSectionID) {

Исходный файл: /WebControls/Template/Template.ascx
Линия: 1

----------------------------------------------- --------------------------------- Информация о версии: Microsoft .NET Версия Framework: 2.0.50727.3053; ASP.NET версия: 2.0.50727.3053

Я попытался переименовать класс и переименовать имя файла, но это не сработало.

У кого-нибудь есть идеи по этому поводу?

Ответы [ 6 ]

37 голосов
/ 24 августа 2009

Может появиться из-за разных названий компонентов? например Button1 и button1, он компилируется как регистрозависимый, но выполняется как регистрозависимый.

12 голосов
/ 24 августа 2009

В вашем ASCX-файле просмотрите каждый элемент управления и измените его идентификатор. Например,

<asp:TextBox id="foo" />

изменить на

<asp:TextBox id="foo1" >

Возможно, у вас есть элемент управления с идентификатором, который соответствует свойству в вашем файле ascx, поэтому, когда компилятор пытается сделать переменные экземпляра конфликтующими.

3 голосов
/ 21 апреля 2012

У меня та же проблема, и она решена, и решение находится в проверке вашего кода, и вы найдете пару элементов управления с одинаковым именем:

protected Button Home;

protected System.Web.UI.HtmlControls.HtmlAnchor home; 

Вы должны удалить одну строку или оставить комментарий.

1 голос
/ 17 января 2017

Выбранный ответ кажется правильным.

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

0 голосов
/ 19 октября 2009

Это связано с тем, что можно описать только как дефект в System.Web.UI.Util.GetNonPrivateFieldType (Type classType, String fieldName) , который позволяет полям пользовательского интерфейса (.aspx / .ascx) компилировать как нечувствительный к регистру, но пытается извлечь их как чувствительный к регистру во время начального анализа.

В настоящее время потенциальное решение - перехватить его во время компиляции с помощью задачи ms-build .

0 голосов
/ 24 августа 2009

Я бы трал ваш web.config для ссылок 1.1 и 2.0 на одну и ту же DLL. В большинстве случаев, которые я получил, это был System.Web.Extensions.

Также проверьте @registers на страницах в случае сбоя.

Удачи (это не забавная ошибка, чтобы найти!)

Dan

...