2016-01-27 7 views
0

Иногда проект C# будет иметь пользовательский элемент управления, принадлежащий другому проекту C#, и мне придется его переместить. Попытка просто скопировать + вставить этот пользовательский контроль над результатами в пространствах ошибок. Предположим, что проект 1 имеет пространство имен namespace General.Category1.Controls, а проект 2 имеет пространство имен namespace General.Category2.Controls.Копирование элемента управления пользователя из одного проекта в другой в пределах одного решения

шаги я изначально принял являлись:

1) Copy + контроль пасты (который включает в себя .cs, designer.cs и .resx файлы) из проекта 1 проекта 2

2) Изменить пространство имен для проект 2's 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 не обновляются автоматически? Является ли фактический ответ знать, где этот элемент управления используется, и обновлять декларации самостоятельно, как я это сделал?

[EDIT]: первые 2 шага предназначены для самого управления (это .cs и .designer.cs файлов). Третий шаг связан с любыми формами, в которых элемент управления был помещен, прежде чем копировать его, потому что он все еще использует старое пространство имен, поэтому все файлы формы .designer.cs также должны быть изменены.

+0

как вы ссылаетесь на пользовательские элементы управления - это приложение для веб-приложений или Windows.? в этом веб-приложении вы можете показать, как вы ссылаетесь на него в файле .aspx ..? – MethodMan

+0

вместо того, чтобы копировать и вставлять их повторно, почему бы вам не создать проект библиотеки управления и ссылку? – Muckeypuck

+0

@MethodMan Это приложение для Windows. – McRealz

ответ

0

Был там! Для этого я не использую copy-paste. В VS-2017 UserControl1 может быть скопирована на другой проект, следующим образом:

  • В Windows: копирование UserControl1.cs, .designer.cs и .resx в свой новый проект каталог
  • в VS: щелкните правой кнопкой мыши проект в обозревателе решений, установить его в качестве Запуск проекта

  • правой кнопкой мыши новый проект в обозревателе решений и выберите Add Existing I ТЕМ

  • Теперь выберите только UserControl1.CS файл в картотеку

  • Подождите, Решение Explorer зарегистрирует другие файлы, изменить символ
  • В VS, откройте UserControl1.designer.cs .. изменение имен пространство имен нового проекта
  • В VS, открытые UserControl1.cs, изменение пространства имен в новое пространство имен проекта

После этого шага, восстановить свой новый проект. Перейдите к дизайну формы и откройте панель инструментов. На панели инструментов появится UserControl.