【问题标题】:C# Winforms Designer won't open because it cannot find type in same assemblyC# Winforms Designer 无法打开,因为它在同一程序集中找不到类型
【发布时间】:2013-03-27 22:52:24
【问题描述】:

我收到以下错误

找不到类型“My.Special.UserControl”。请确保引用了包含此类型的程序集。如果此类型是您的开发项目的一部分,请确保已使用当前平台或任何 CPU 的设置成功构建项目。

但没有任何意义的是My.Special.UserControl 与表单在同一个程序集中。更重要的是,如果我查看 Designer.cs 文件上的代码,有对 My.Special.UserControl 的引用似乎很好。该程序集构建良好,并且运行良好。只有设计师有问题。

因此,我们必须通过手动调整 Designer.cs 文件来完成所有设计工作。如何让设计师重新工作?

【问题讨论】:

  • 我能够绕过这个错误的唯一方法是重新启动 VS。这需要很多,但仍然比更改 Designer.cs 更好。
  • 什么是继承或 My.Special.UserControl,它是直接来自 UserControl 还是介于两者之间。您使用的是什么版本的 Visual Studio?
  • @Jonathan 你能解决这个错误吗?
  • 将目标切换到 x86,现在我可以打开设计器了。我控制的东西不能与 x64 兼容。浏览控件列表,我没有看到任何突然出现在我身上的东西。奇怪的是,当我单击运行时,控件可以构建 x64,但对于设计器却不行。
  • 我已将您投票给 0。我认为这个问题没有任何问题。

标签: c# winforms custom-controls windows-forms-designer


【解决方案1】:

我遇到了完全相同的问题。我相当确定它已连接到平台目标 x64。这是一篇相关文章,将其作为 Visual Studio 中的一个错误提及:

https://stackoverflow.com/a/11582828/7665665

我如何处理:虽然我的解决方案实际上只有 x64,但我为项目创建了另一个平台目标 x86,只是为了能够使用设计器。现在我将目标切换到 x86,以便在 VS Designer 中查看我的控件。对于其他一切,我切换回 x64。

【讨论】:

    【解决方案2】:

    将项目类型临时更改为x86,编译并打开Designer。 Visual Studio 是一个 32 位应用程序。

    【讨论】:

    • 非常感谢!这就是我的答案。
    • 工作,拯救了我的一天!
    • 看准了!我读过的所有其他解决方案都非常技术性,原因很简单。对于未来的发展,这是一个真正的约束。我只针对 x64,所以每次都必须交换是一种痛苦。这必须作为越来越多的目标 x64 进行排序。
    【解决方案3】:

    在我的项目中,只有当我在解决方案的单独项目中创建自定义用户控件时它才有效:

    1. 添加新项目“类库(.NET Framework)”
    2. 添加对 System.Windows.Forms & System.Drawing 的引用
    3. 在新项目中添加新用户控件的源代码
    4. 构建解决方案
    5. 打开设计器
    6. 在窗体中拖动新的用户控件

    在我的例子中,当我在表单中拖动自定义用户控件时,设计器会自动添加对新项目的引用。

    希望这可以帮助其他偶然发现这个问题的人。

    【讨论】:

      【解决方案4】:

      当我对 DataGridView 进行子类化时,我也有类似的经历。以下程序对我有用:

      1. 关闭表单设计器选项卡
      2. 关闭 VS (2015)
      3. 删除项目的 /bin 和 /obj 文件夹
      4. 重启VS
      5. 重建解决方案

      我不知道可以跳过哪些步骤,因为我没有花时间完善流程。

      【讨论】:

        【解决方案5】:

        从 VS 2017 社区版转到专业版时,我遇到了类似的问题。

        1. 关闭VS
        2. 转到项目文件夹
        3. 删除 .vs 文件夹。如果需要,请备份。
        4. 开始VS

        这应该可以解决问题

        【讨论】:

        • 对我来说,它最终成为.vs 子目录中的.suo 文件。即使不更改 VS 版本。删除 binobj 目录没有帮助。
        【解决方案6】:

        将项目目标切换到 x86 是我唯一可能的解决方案

        【讨论】:

        • 这样做只是一个副作用。不是一个合理的解决方案。而且它会不必要地更改目标架构,这在大多数情况下是不可取的。
        【解决方案7】:

        在我的情况下,我只是卸载项目并再次重新加载

        【讨论】:

          【解决方案8】:

          我的 form.cs 中从标准 .NET 控件派生的用户控件也有同样的问题。以上没有对我有用(我的解决方案编译为 x64,因为其他仅支持 x64 的非托管组件)。

          我最终创建了一个单独的项目“Utils”并将有问题的派生控件移至该项目。这就像一个魅力!

          【讨论】:

            【解决方案9】:

            对我来说,我删除了表单的 .resx 文件,它构建并显示在设计器中,没问题。去看看....

            【讨论】:

            • 删除 .resx 对我没有帮助。
            【解决方案10】:

            以下程序对我有用:

            1. 删除源代码目录中的 /bin 和 /obj 文件夹。
            2. 重新启动 VS(确保有问题的表单设计器已关闭)
            3. 编译
            4. 再次在 Designer 中打开表单。问题应该得到解决。

            我确定不需要同时删除 /bin 和 /obj,但我无法重现错误并找到更具体的解决方案。 (我的项目通常足够小,重新编译整个项目没什么大不了的。)

            通常,此错误似乎发生在重构/重命名违规类的对象之后。所以我的猜测是,在重构用户控件或自定义控件后,有一个 VS 错误不会重新编译适当的目标文件。

            【讨论】:

            • 这正是由于命名空间和项目重命名而发生在我身上的事情。但是,这些步骤似乎对我不起作用。我正在研究其他几个替代方案,完成后会发布有效的答案。
            • 重启对我有用。书中最古老的把戏!
            【解决方案11】:

            这件事今天发生在我身上。清理、重建、重新启动 Vs 甚至重新启动都没有帮助。一切都按预期运行,唯一不起作用的是 VS 中的设计师。

            在我的情况下,由于没有任何工作,我去了设计器文件,删除了有问题的控件,然后添加了一个新控件。重命名,重新分配事件侦听器并且它起作用了。

            Designer 现在可以工作了,但如果这一定是某种 VS 错误,我不知道。


            这不是我来 SO 时想阅读的答案,但我会发布它以防以后对任何人有帮助。

            【讨论】:

              【解决方案12】:

              您的表单/用户控件的加载或初始化部分可能发生了异常。您可以尝试注释掉那里的任何代码并重新尝试在设计器中打开吗?

              您可以使用另一个 Visual Studio 实例将调试器附加到您的 Visual Studio 实例,而不让您打开表单。一旦发生异常,您将能够查明出错的位置。

              【讨论】:

                猜你喜欢
                • 2012-01-11
                • 1970-01-01
                • 1970-01-01
                • 2011-04-23
                • 2016-09-08
                • 2019-07-12
                • 1970-01-01
                • 2021-11-02
                • 2020-10-21
                相关资源
                最近更新 更多