c# Winforms设计器无法打开,因为它无法在同一程序集中找到类型

本文关键字:程序 程序集 类型 集中 因为 Winforms | 更新日期: 2023-09-27 18:07:42

我得到以下错误

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

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

因此,我们必须通过手动调整Designer.cs文件来完成所有的设计工作。我怎样才能让设计师再次工作?

c# Winforms设计器无法打开,因为它无法在同一程序集中找到类型

下面的程序对我有效:

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

我确信删除/bin和/obj是没有必要的,但我还没有能够重现错误,并得出一个更具体的解决方案。(我的项目通常足够小,重新编译整个东西没什么大不了的。)

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

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

可能在Form/UserControl的Load或Initialize部分发生异常。您可以尝试注释掉那里的任何代码并重试在设计器中打开吗?

您可以使用visualstudio的另一个实例将调试器附加到visualstudio实例上,而不允许打开窗体。一旦出现异常,您将能够精确定位出问题的位置。

当从VS 2017社区版转移到专业版时,我有类似的问题。

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

这应该能解决问题

我也遇到过完全相同的问题。我相当确定它连接到平台目标x64。这里有一篇相关的文章提到它是Visual Studio中的一个bug:

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

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

我在form.cs中从标准. net控件派生的用户控件中遇到了同样的问题。以上这些对我都不起作用(我的解决方案被编译为x64,因为其他非托管组件只支持x64)。

我最终创建了一个单独的项目"Utils",并将违规的派生控件移到该项目中。

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

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

今天发生在我身上。清理,重建,重新启动v甚至重新启动都没有帮助。一切都按照预期进行,唯一不正常的是VS.

中的设计器。

在我的情况下,因为没有其他工作,我去设计文件,删除有问题的控件,然后添加一个新的。重命名,重新分配事件监听器,它工作了。

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


这不是我想读的答案,当来到SO,但我将张贴它,以防它帮助任何人以后。

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

我在子类化DataGridView时也有类似的经历。下面的步骤对我有效:

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

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

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

  1. 添加新项目"类库"。净框架)"
  2. 添加System.Windows.Forms &系统。画
  3. 在新项目中添加新用户控件的源
  4. 构建解决方案
  5. 打开设计器
  6. 在窗体
  7. 中拖动新的用户控件

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

希望这篇文章能帮助到其他遇到这个问题的人。