views:

1622

answers:

4

Recently, my team converted ASP.NET project from .NET 1.1 to .NET 2.0. Everything is pretty good so far except for one web page.

This is the error message I got when I tried to open this page:

Server Error in '/' Application.

Parser Error Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

Parser Error Message: Ambiguous match found.

Source Error:

Line 1: <%@ Control Language="c#" AutoEventWireup="false" Codebehind="Template.ascx.cs" Inherits="eReq.Web.WebControls.Template.Template" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> Line 2: Line 3: function ExpandCollapse_Template(inBtn, inSection, inSectionID) {

Source File: /WebControls/Template/Template.ascx
Line: 1

-------------------------------------------------------------------------------- Version Information: Microsoft .NET Framework Version:2.0.50727.3053; ASP.NET Version:2.0.50727.3053

I tried renaming class and renaming filename but it didn't work.

Anyone have any idea on this? Thanks in advanced.

+2  A: 

It may appeared because of different names of components? for example Button1 and button1, it compiles as casesensitive, but executed as caseinsensitive.

x2
The project compiled without any problem.Running this web app froom any other pages are fine except this page.I believe this is a runtime error.In Visual Studio 2008, there is a blue underline under the directive line in the Template.ascx file saying "ASP.NET runtime error : Ambiguous match found."
natch3z
I found it at last... Thanks x2.There's a user control that use different cases in ASCX and CS file.I guess this is because .NET 2.0 is more strict with cases... Can anyone confirm this?
natch3z
Another note here - .NET doesn't do a good job that I've seen of specifying which controls/variables are having a conflict. On my page I had one variable called 'bannerImage', a String, and another 'BannerImage', a PlaceHolder control and I was lucky to find the two...
theJerm
+1  A: 

In your ASCX file, go through each and every control and change its id. For example,

<asp:TextBox id="foo" />

change it to

<asp:TextBox id="foo1" >

You've probably got a control with an ID that matches a property in your ascx file, so when the compiler is trying to make instance variables its colliding.

Will
A: 

I'd trawl your web.config for 1.1 and 2.0 references to the same DLL. In most cases that I have gotten this it was System.Web.Extensions.

Also check the @registers in Pages if that fails.

Good luck (it is not a fun bug to find!)

Dan

Daniel Elliott
A: 

This is due to what can only be described as a defect in System.Web.UI.Util.GetNonPrivateFieldType(Type classType, String fieldName) that allows UI (.aspx/.ascx) fields to compile as case-insensitive but attempts to retrieve them as case-sensitive during the intial parse.

A potential remedy for the time being is to catch it at compile-time with an ms-build task.

Nariman