2009-10-06 3 views
16

У меня есть проблема (очевидно, вопрос :)Имя типа {myUserControl} не существует в типе {myNamespace.myNamespace}

У меня есть project-- MyProject ... поэтому остальная часть проекта использует по умолчанию любые классы в качестве пространства имен «MyProject» ... никаких проблем.

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

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

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

Как только я вручную удалю дополнительный «Мой проект», сохраните и скомпилируйте, все в порядке. Однако, если я заново отредактирую форму, измените что-то, 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 
    ... 

} 

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

ответ

11

Что делает дизайнер, это нормально.

-> У вас в вашем проекте есть пространство имен, называемое MyProject.MyProject.

(Попробуйте найти его в «Class View»)

+2

НАГРУЗКИ благодарности. – Larry

+15

Также случается, когда у вас есть класс в пространстве имен с тем же именем, что и пространство имен. – greenskin

0

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

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

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

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

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

11

PS. для тех, у кого такая же проблема, но не найдено ни одного решения ...

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

  1. Создайте новый проект WindowsFormApplication, используя то же имя, что и его имя решения.
  2. По умолчанию имя созданного по умолчанию имени называется «Form1». И измените его имя так же, как имя проекта.
  3. Добавить новый класс UserControl в проект.
  4. Построить/перестроить проект и проверить, что usercontrol находится на панели инструментов.
  5. Перетащите usercontrol на форму и начните отладку.
  • Error: The type name 'userControlName' does not exist in the type 'projectName.FormName'

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

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

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

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

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

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

+1

У меня возникла аналогичная проблема. Для меня это был класс с тем же именем пространства имен.Поднял меня с ума, но благодаря этому ответу я нашел его. –

1

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

2

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

0

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

<%@ Import Namespace="MyNamespace" %> 

в .master файл

0

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

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