为什么ASP.NET自动生成的.designer代码的类型不正确?

时间:2009-08-26 01:01:37

标签: asp.net dotnetnuke

我正在努力攻击DotNetNuke Events模块。我已经设置了源代码,并且无需修改即可构建A-OK。但是,当我更改EventMonth.ascx文件时,Visual Studio会更新与之关联的.designer.vb文件...并声明两个类型错误的对象!它看起来像这样:

Protected WithEvents EventIcons As Global.System.Web.UI.UserControl

应该是这样的:

Protected WithEvents EventIcons As Global.DotNetNuke.Modules.Events.EventIcons

显然,这不会起作用......编译器(正确地)会抛出错误,其中在代码中使用了EventIcons。是什么导致这个?我可以轻松地手动修复它,但当然它稍后会再次破坏。我不认为控件的ID与类名相同,因为同一控件的另一个实例会发生同样的事情,但名称不同。

更新:好的......我相信这种情况正在发生,因为在设计时无法找到引用的用户控件。但它显然在运行时有效:

<%@ Register TagPrefix="evt" TagName="Icons" Src="~/DesktopModules/Events/EventIcons.ascx" %>

这具有逻辑意义......但我想问题就变成“在设计时解决了什么?”我想我可以将其更改为“EventIcons.ascx”,它将生成代码OK。但它会在运行时运行吗? :|

2 个答案:

答案 0 :(得分:8)

因为项目不是从应用程序根目录开始,所以在必须正确解析~之前,必须告诉项目真正的应用程序根目录。进入项目属性的Web选项卡,并确保在“Servers”标题下选择“Use Local IIS Web server”。将项目URL设置为特定项目的URL(即http://localhost/DotNetNuke_2/DesktopModules/Events)。然后,检查覆盖应用程序根URL并将其设置为应用程序的根URL(即http://localhost/DotNetNuke_2)。这将允许Web应用程序项目知道如何找到这些控件。

Src属性是相对于控件的,因此它应该可以正常工作,只需将其设置为"EventIcons.ascx",而不是从应用程序的根目录指定它。

答案 1 :(得分:0)

〜解析为应用程序文件夹的根目录。