有时,一个 C# 项目中会有一个属于另一个 C# 项目的用户控件,我必须将它移过来。尝试简单地复制 + 粘贴该用户控制会导致命名空间错误。假设项目 1 的命名空间为namespace General.Category1.Controls
,项目 2 的命名空间为namespace General.Category2.Controls
。
我最初采取的步骤是:
1)从项目1复制+粘贴控件(包括.cs
,designer.cs
和.resx
文件)到项目2
2)将命名空间更改为项目 2namespace General.Category2.Controls
在构建的这一点上,在复制 + 粘贴状态之前,我收到了来自使用此控件的表单的其他错误'The type of namespace name 'UserControl1' does not exist in namespace 'General.Category1.Controls' (are you missing an assembly reference?)
。事实证明,designer.cs
复制+粘贴后,表单文件没有更新到正确的命名空间。
那么我添加一个额外的步骤:
3)更改声明以匹配General.Category2.controls
aka的新命名空间private General.Category2.Controls UserControl userControl1;
我很困惑为什么designer.cs
文件不会更新,因为通常不建议编辑designer.cs
文件。但是话又说回来,只要您不触摸InitializeComponent()
实际文件本身中所述的方法,就可以修改它们。
总之,为什么所有的都designer.cs
不会自动更新?知道这个控件在哪里使用并像我一样自己更新声明的实际答案是什么?
[编辑]:前两个步骤是针对控件本身(它.cs
和.designer.cs
文件)。第三步是与复制之前放置控件的任何表单相关联,因为它仍在使用旧的命名空间,因此所有表单.designer.cs
文件也必须更改。