Имя типа {myUserControl} не существует в типе {myNamespace.myNamespace} - PullRequest
18 голосов
/ 06 октября 2009

У меня есть проблема (очевидно, вопрос:)

У меня есть проект - MyProject ... следовательно, остальная часть проекта использует по умолчанию любые классы в качестве пространства имен "MyProject" ... нет проблем.

В моем проекте я создал пользовательский элемент управления, в котором есть много других элементов управления (метка, текстовые поля и т. Д.). Таким образом, этот класс также в пространстве имен по умолчанию «MyProject». Все компилируется без проблем. Просто чтобы подтвердить видимость области, на этом пользовательском элементе управления я убедился, что код DESIGNER и Code-Behind (My code) ОБА внутри одного и того же пространства имен «MyProject» (они есть), и они оба соответственно PUBLIC PARTIAL CLASS MyUserControl .

Теперь вопрос. Я создаю простую форму (также по умолчанию в пространстве имен «MyProject»). Из панели инструментов существует «MyUserControl», поэтому я перетаскиваю его на MyNewForm. Перетаскивание в порядке.

Сохранить все, скомпилировать, выполнить ошибку ... Дизайнер добавляет дополнительную ссылку «MyProject», создавая впечатление, что пользовательский элемент управления фактически находится в MyProject.MyProject.MyUserControl .. вместо MyProject.MyUserControl.

Как только я вручную удаляю лишний «MyProject.», Сохраняю и компилирую, все в порядке. Однако, если я заново отредактирую форму, что-то изменим, M $ вернет ее обратно к исходной ссылке «MyProject.MyUserControl».

Все, что говорится, вот отрывки из моего проекта ...

namespace MyProject
{
   partial class MyNewForm
   {
      ...
      private void InitializeComponent()
      {
         // THIS is the line that has the extra "MyProject." reference
         // when I manually remove it, all works perfectly
         this.MyUserControl1 = new MyProject.MyUserControl();
      }
   }


   private MyUserControl MyUserControl1;

}

Тогда в определении MyUserControl у меня есть ...

namespace MyProject
{
   public partial class MyUserControl : UserControl
   ...
}

и из MyUserControl через конструктор ...

namespace MyProject
{
   public partial class MyUserControl : UserControl
   ...

}

Спасибо за помощь ...

Ответы [ 7 ]

16 голосов
/ 06 октября 2009

То, что делает дизайнер, в порядке.

-> В вашем проекте есть пространство имен MyProject.MyProject.

(Попробуйте найти его в «представлении классов»)

12 голосов
/ 04 декабря 2012

PS. любому, кто имеет такую ​​же проблему, но не нашел решения ...

Предполагается, что вы создали новое приложение WindowsForm;

  1. Создайте новый проект WindowsFormApplication, используя то же имя, что и имя его решения.
  2. Предварительно созданное имя формы по умолчанию называется «Form1». И измените его имя так же, как имя проекта.
  3. Добавить новый класс UserControl в проект.
  4. Сборка / перестройка проекта и проверка расположения пользовательского элемента управления на Панели инструментов.
  5. Перетащите пользовательский контроль на форму и начните отладку.
  • Ошибка: имя типа 'userControlName' не существует в типе 'projectName.FormName'

Я исследовал сеть для любого решения, но не смог придумать ответ ...

Но если вы измените имя формы, отличное от имени проекта, оно будет разрешено.

Если вы настаиваете на том, что имя формы и имя проекта должны совпадать в зависимости от потребностей вашего проекта, можно создать собственную DLL и использовать в ней usercontrol.

Затем, чтобы использовать его в качестве элемента управления, добавьте файл DLL в «ToolBox», используя «Выбрать элементы ...»

Наконец он будет готов к использованию.

PS2. борясь с той же проблемой часами, это решение я нашел.

2 голосов
/ 25 сентября 2014

Имя пространства имен и имя класса должны различаться. Код, сгенерированный путем добавления WCF, автоматически ссылается на пространство имен, но если имя класса совпадает с именем пространства имен, сгенерированный код просматривает класс и ничего не скомпилируется.

1 голос
/ 09 сентября 2013

Имя пользовательского элемента управления и форма совпадают. Использование разных имен решит проблему.

0 голосов
/ 17 августа 2016

Это также происходит, когда вы используете разные страницы, но с тем же именем. В моем случае я создал набор данных «Grants.xsd» и страницу «Grants.aspx». Каким-то образом они попали в конфликт, что привело к этой ошибке.

Вы можете легко решить эту проблему, наведя курсор на ключевое слово «виновник» (имя класса), и в Visual Studio 2013 он точно скажет вам, где находится конфликт.

0 голосов
/ 02 декабря 2014

Только что столкнулся с этим, где у меня была MasterPage с явным

<%@ Import Namespace="MyNamespace" %>

в файле .master

0 голосов
/ 07 февраля 2011

Так как это было лучшим результатом поиска, когда у меня была эта ошибка, просто хочу опубликовать свою причину и решение.

  • В рамках решения у меня было два проекта, в которых использовался общий файл класса, который был добавлен в виде ссылки.
  • Я добавил второй файл класса «помощник» в качестве ссылки, использовал его код в первой и получил ошибку.

Проблема была в том, что я не добавил второй класс помощника в качестве ссылки в обоих проектах.

Таким образом, у другого проекта был обновленный «общий» класс, но он не знал о классе «помощник», который он сейчас использовал.

Примечание для себя: уделите больше внимания столбцу проекта в списке ошибок:)

...