【问题标题】:ASP.NET Designer.xx generates 'already contains a definition for' control errorASP.NET Designer.xx 生成“已包含定义”控件错误
【发布时间】:2023-04-09 17:17:01
【问题描述】:

我目前有一个 DotNetNuke 模块的项目设置。在这个项目中,我有一些用户控制文件,这些文件使用 ASP.NET 4.0 和 C# 使用 TFS 进行版本控制。

目前,该项目将构建并运行良好,没有任何问题。但是,我对项目中某些用户控件的前端 .ascx 文件所做的任何更改都将导致相应的 .ascx.designer.cs 生成约 14 个错误,说明以下错误:

错误##“ControlClass”类型已经包含“SomeControlID”“ControlName.ascx.designer.cs 的位置”的定义

我之前没有对此进行任何其他我认为会导致此问题的更改。它只是随机开始在我的项目中发生。

我尝试了以下方法:

  • 删除 .ascx.designer.cs => 选择项目 => 'Convert to Web Application' 重新生成设计器文件。这总是会导致显示相同的错误。
  • 重置 IIS。删除 ASP.NET 临时文件。手动清理解决方案并重建。这也会重现相同的错误。
  • 从项目中删除用户控件。添加具有相同名称的新用户控件。建造。将代码复制到新控件的前后。然后重建。重现相同的错误。

为了让事情变得更奇怪,当我试图确定这是否可能是某种语法问题时,我执行了以下操作并产生了以下结果:

  1. 撤消所有更改并恢复到 TFS 中的工作版本。
  2. 构建项目。没有错误,一切都很好并且可以构建。
  3. 在前端 .ascx 文件末尾添加一个空格。
  4. 构建项目。所有错误再次重现。
  5. 确定什么都没做后,按 CTRL+Z 以确保它 已恢复正常。
  6. 重建项目。所有错误再次重现。

我不知道为什么,但是每次这个项目对一些选定的用户控件进行更改时,设计器文件都会突然生成这些错误。

这些用户控件包含复杂的控件,其中包含充满其他控件的模板等...但是在构建这些控件时,我没有遇到不同模板中的名称相同等问题。

通过在线搜索此问题,我已经没有什么想法可以尝试了。

有什么建议吗??

编辑: 有人建议我只是手动删除额外生成的控件,以便构建项目。在更深入地研究这个之后,我有两个问题。

首先,这将允许项目构建,但我每次更新 ASCX 时都必须这样做,因为在我删除它们并进行另一次更改后,控制声明又回来了。

第二,虽然这将允许项目构建没有问题。它不会运行,而是会引发以下运行时错误:

基类包含字段“btnDelete”,但其类型(System.Web.UI.WebControls.ImageButton)与控件类型(Telerik.Web.UI.RadButton)不兼容。

此错误向我表明,我为测试而删除的“btnDelete”控件在构建时被标记为“重复”错误,现在被标记为不正确的类型。

我认为这是因为用户控件上有多个不同类型的“btnDelete”按钮,这给了我错误。这些按钮包含在其编辑/删除模板的不同 RadGrid 控件中。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    想在我的案例中添加这个错误以及我是如何解决的。

    发生在升级到 Visual Studio 2010 项目的旧项目上。在我的情况下,必须将 .aspx 文件转换为“Web 应用程序”以生成设计器文件。在这种情况下,不太确定具体发生了什么,但开始出现上述错误。开始查看变量,但在 (.cs)、aspx 页面或任何其他相关控件后面的代码中没有多次定义它。

    我开始查看 aspx 页面标题,这时我注意到了可能的问题。我有 2 个名称相似的文件... iABC.aspx (.cs,.designer) 和 ABC.aspx(.cs,.designer) 并且在 iABC.aspx 标头中,它继承了“ABC”...第一个符号有什么不对劲。我将其更改为正确的设置“iABC”,然后决定检查后面代码中的类名,瞧,iABC.aspx.cs 的类名设置为“class ABC”而不是“class iABC” .

    一旦我解决了这个烂摊子,一切都很好。

    HTH

    戴夫

    【讨论】:

    • 我遇到了同样的问题 - 遗留应用程序和混乱。
    【解决方案2】:

    听起来有些东西正试图将您的控件的副本添加到设计器文件中。 VS 会在您进行的每次编辑时更新设计器文件,这就是为什么它会在您编辑 aspx 或 ascx 文件时立即发生。你可以做的一件事是当错误被抛出时,打开你的 Designer.cs 文件并检查——我敢打赌你会看到重复的声明。如果是这种情况,它可能是您使用的任何库中的一个错误——尽管如果没有更多信息我无法确定。删除重复项,您应该能够再次构建。为了防止它再次发生,我们需要查看设计器文件中生成的内容。

    【讨论】:

    • 抱歉,当我从设计器文件中删除“重复条目”时,我似乎忘记提及了。该项目确实会正确构建,但不会运行,因为它会抛出一个错误,说控件不存在等等......所以这对我来说不是一个可能的解决方案。
    • @user1048281,为了好玩,尝试将相关控件的声明放入您的代码隐藏文件中,并将其完全从设计器文件中删除。然后会发生什么?
    • 我认为我无法尝试这样做,因为有问题的控件都嵌套在非常复杂的 RadGrid 的模板中。这确实带来了一些我以前没有想到的东西。似乎所有有问题的控件都位于我的 RadGrid 的 EditItemTemplate/InsertItemTemplate/GridTemplateColumn 声明中。这很有趣,可能表明这是 Telerik 问题,但是我无法想象为什么这个控件有这个问题,而我所有其他类似的控件都没有。
    【解决方案3】:

    在我的例子中,我在两个不同的类中使用了两次相同的命名空间。

    再次验证我们的命名空间和类名 - 确保错误不是因为重复的类文件。

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多