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
определены в нескольких пространствах имен.