将用户控件从一个项目复制到另一个项目中

时间:2016-01-27 18:04:12

标签: c# .net visual-studio-2010 copy-paste multiple-projects

有时,C#项目中会有一个属于另一个C#项目的用户控件,我将不得不移动它。尝试简单地复制+粘贴用户控件会导致命名空间错误。我们假设项目1的名称空间为namespace General.Category1.Controls,项目2的名称空间为namespace General.Category2.Controls

我最初采取的步骤是:

1)从项目1到项目2的复制+粘贴控件(包括.csdesigner.cs.resx文件)

2)将名称空间更改为项目2 namespace 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又名private General.Category2.Controls UserControl userControl1;的新命名空间

我很困惑为什么designer.cs文件不会更新,因为它通常不建议编辑designer.cs文件。但话说回来,只要您不触及实际文件中的InitializeComponent()方法,也许可以修改它们。

总之,为什么所有designer.cs都不会自动更新?实际的答案是知道这个控件的使用位置,并像我一样自己更新声明吗?

[编辑]:前两个步骤适用于控件本身(它的.cs.designer.cs文件。第三步是与复制它之前放置控件的任何表单相关联,因为它仍然使用旧的命名空间,因此所有表单.designer.cs文件也必须更改。

1 个答案:

答案 0 :(得分:2)

去过那里!我没有使用复制粘贴。 在VS-2017中,可以将UserControl1复制到另一个项目,如下所示:

  • 在Windows中:将UserControl1.cs,.designer.cs和.resx 复制到新项目中 目录
  • 在VS中:右键单击解决方案资源管理器中的项目,将其设置为启动 项目

  • 在解决方案资源管理器中右键单击新项目,然后选择添加现有项

  • 现在,在文件框中选择 UserControl1.cs 文件

  • 等等,解决方案资源管理器将注册其他文件,更改符号
  • 在VS中,打开 UserControl1.designer.cs ..将命名空间更改为新项目命名空间
  • 在VS中,打开 UserControl1.cs,将名称空间更改为新项目名称空间

完成此步骤后,重建新项目。转到表单设计并打开工具箱。工具箱将显示您的UserControl。