Visual Studio 2010 постоянно меняет мой элемент управления winforms

У меня странная ситуация с пользовательским элементом управления в VS 2010. Дизайнер форм постоянно меняет мою запись, а затем говорит, что ее не существует! Он компилируется и запускается в первый раз, а затем, если я изменяю что-то несвязанное, выдает ошибку в файле designer.cs (не удается разрешить символ SomeEntry).

private SomeEntry someEntry;
// ...
this.someEntry = new **MyNameSpace**.SomeEntry();

если я удалю MyNameSpace.

this.someEntry = new SomeEntry();

это работает, пока я не внесу изменения снова. Если я смотрю на класс, когда мышь находится над измененным файлом конструктора, SomeEntry показывает SomeEntry.SomeEntry()вместо MyNameSpace.SomeEntry()

По сути, определение выглядит примерно так:

namespace MyNameSpace
{
    public partial class SomeEntry : FormValidatingUserControl
    {
        public SomeEntry()
        {
            InitializeComponent();
        }
    }
}

Итак, что мне делать?

2 ответа

Решение

Получается, что я должен был опубликовать свой код именно так, как он появился, так как я уверен, что кто-то понял бы это для меня раньше.

Проблема заключалась в том, что я пытался упростить пост и изменил имена MyNameSpace и SomeEntry, чтобы сделать его общим.

Проект является чем-то, что пространство имен является чем-то (пока что нормальным), и сгенерированный класс был чем-то из структуры сущностей.

Чтобы воспроизвести проблему, я создал новый проект под названием WinFormTestX. Итак, решением является WinFormTestX и проект WinFormTestX. Я добавил класс WinFormTestX, но ничего не сделал с ним.

namespace WinFormTestX
{
    public class WinFormTestX
    {
        public int ID { get; set; }
    }
}

Теперь я создаю UserControl (UserControl1) и помещаю на него простую кнопку. Скомпилируйте его, и набор инструментов добавляет этот элемент управления, как и ожидалось. Теперь я помещаю его в форму Form1, компилирую и получаю сообщение об ошибке:

Ошибка 1 Имя типа "UserControl1" не существует в типе "WinFormTestX.WinFormTestX" D:\Data\Projects\Temp\WinFormTestX\Form1.Designer.cs 31 51 WinFormTestX

Как только я щелкаю правой кнопкой мыши по классу WinFormTestX и исключаю из проекта (или удаляю его), все работает.

Таким образом, наличие класса в проекте с тем же именем, что и пространство имен, даже если он не используется, вызывает проблему. Очевидно, теперь, когда я знаю причину, есть простой способ обойти это. Но является ли это "ошибкой", которую следует отправить в Microsoft?

У меня были такие вещи, когда я вручную перемещал класс в новое пространство имен. Если вы не будете осторожны, ваш класс может быть определен несколько раз. Например, может существовать остаточный файл конструктора.cs, который по-прежнему определяет класс в его старом пространстве имен, или какое-либо другое несоответствие.cs /.designer.cs. Другими словами, ваша сборка может содержать как SomeEntry.SomeEntry а также MyNameSpace.SomeEntry учебный класс.

Проверьте браузер объектов Visual Studio, чтобы увидеть, есть ли у вас SomeEntry определены в нескольких пространствах имен.

Другие вопросы по тегам