c# Winforms设计器无法打开,因为它无法在同一程序集中找到类型
本文关键字:程序 程序集 类型 集中 因为 Winforms | 更新日期: 2023-09-27 18:07:42
我得到以下错误
找不到类型"My.Special.UserControl"。请确保引用了包含此类型的程序集。如果此类型是开发项目的一部分,请确保使用当前平台或Any CPU的设置成功构建了该项目。
但是没有任何意义的是My.Special.UserControl
与形式在同一个汇编中。更重要的是,如果我查看Designer.cs文件上的代码,有对My.Special.UserControl
的引用似乎很好。该程序集构建良好,运行良好。是设计师出了问题。
下面的程序对我有效:
- 删除源代码目录中的/bin和/obj文件夹
- 重新启动VS(确保违规的表单设计器已关闭)
- 再次在设计器中打开窗体。这个问题应该得到解决。
我确信删除/bin和/obj是没有必要的,但我还没有能够重现错误,并得出一个更具体的解决方案。(我的项目通常足够小,重新编译整个东西没什么大不了的。)
通常,此错误似乎发生在重构/重命名违规类的对象之后。所以我的猜测是,有一个VS的错误,不重新编译适当的对象文件后,用户控件或自定义控件被重构。
将项目类型临时更改为x86,编译并打开设计器。Visual Studio是一个32位的应用程序。
可能在Form/UserControl的Load或Initialize部分发生异常。您可以尝试注释掉那里的任何代码并重试在设计器中打开吗?
您可以使用visualstudio的另一个实例将调试器附加到visualstudio实例上,而不允许打开窗体。一旦出现异常,您将能够精确定位出问题的位置。
当从VS 2017社区版转移到专业版时,我有类似的问题。
- 关闭VS
- 进入项目文件夹
- 删除。vs文件夹如果需要,请备份。
- 开始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时也有类似的经历。下面的步骤对我有效:
- 关闭窗体设计器选项卡
- Close VS (2015)
- 删除项目 的/bin和/obj文件夹
- 重启VS
- 重建解决方案
我不知道哪些步骤可以跳过,因为我没有花时间来完善这个过程。
在我的项目中,只有当我在解决方案中的单独项目中创建自定义用户控件时才有效:
- 添加新项目"类库"。净框架)"
- 添加System.Windows.Forms &系统。画
- 在新项目中添加新用户控件的源
- 构建解决方案
- 打开设计器
- 在窗体 中拖动新的用户控件
在我的例子中,当我在窗体中拖动自定义用户控件时,设计器会自动添加对新项目的引用。
希望这篇文章能帮助到其他遇到这个问题的人。