Ошибка выполнения ASP.NET: обнаружено неоднозначное совпадение

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

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

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

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

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

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

Строка 1: <% @Язык управления = "С#" 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

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

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

Ответы

Ответ 1

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

Ответ 2

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

<asp:TextBox id="foo" />

измените его на

<asp:TextBox id="foo1" >

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

Ответ 3

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

protected Button Home;

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

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

Ответ 4

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

Также проверьте @registers в Pages, если это не удается.

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

Dan

Ответ 5

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

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

Ответ 6

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

В настоящее время потенциальное средство состоит в том, чтобы поймать его во время компиляции с помощью ms-build task.