C# Visual Studio 2010不断更改我的winforms控件

C# Visual Studio 2010不断更改我的winforms控件,c#,.net,winforms,.net-4.0,C#,.net,Winforms,.net 4.0,在VS2010中,我有一个奇怪的用户控件情况。表单设计器不断更改我的条目,然后告诉我它不存在!它第一次编译并运行,如果我更改了一些不相关的内容,它会在designer.cs文件中给我一个错误(无法解析符号SomeEntry) 如果我删除MyNameSpace。 this.someEntry = new SomeEntry(); 在我再次做出改变之前,它是有效的。如果我在鼠标悬停在已更改的设计器文件上时查看该类,SomeEntry将显示SomeEntry.SomeEntry() 而不是MyNam

在VS2010中,我有一个奇怪的用户控件情况。表单设计器不断更改我的条目,然后告诉我它不存在!它第一次编译并运行,如果我更改了一些不相关的内容,它会在designer.cs文件中给我一个错误(无法解析符号SomeEntry)

如果我删除MyNameSpace。

this.someEntry = new SomeEntry();
在我再次做出改变之前,它是有效的。如果我在鼠标悬停在已更改的设计器文件上时查看该类,SomeEntry将显示
SomeEntry.SomeEntry()
而不是
MyNameSpace.SomeEntry()

基本上,定义如下:

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

那么,我该怎么办呢?

在手动将类移动到新名称空间时,我遇到过类似的情况。如果不小心,您的类可能会被定义多次。例如,可能存在一个残留的designer.cs文件,该文件仍在其旧命名空间中定义该类,或者存在其他一些.cs/.designer.cs不匹配的情况。换句话说,程序集可能同时包含
SomeEntry.SomeEntry
MyNameSpace.SomeEntry


检查Visual Studio对象浏览器,查看是否在多个名称空间中定义了
SomeEntry

事实证明,我应该按照代码的外观发布代码,因为我相信有人会尽快为我解决这个问题

问题是我试图简化帖子,并更改了MyNameSpace和SomeEntry的名称以保持其通用性

项目是某种东西名称空间是某种东西(到目前为止,是正常的),并且有一个从实体框架生成的类是某种东西

为了重现这个问题,我创建了一个名为WinFormTestX的新项目。因此,解决方案是WinFormTestX和WinFormTestX项目。我添加了一个名为WinFormTestX的类,但没有对其进行任何操作

namespace WinFormTestX
{
    public class WinFormTestX
    {
        public int ID { get; set; }
    }
}
现在,我创建一个UserControl(UserControl1)并在其上放置一个简单的按钮。编译它,工具箱会按预期添加此控件。现在,我将其放到Form1上并编译它,得到一个错误:

类型名称“UserControl1”出现错误1 类型中不存在 'WinFormTestX.WinFormTestX'D:\Data\Projects\Temp\WinFormTestX\Form1.Designer.cs 31 51 WinFormTestX

只要我右键单击类WinFormTestX并从项目中排除(或删除),一切都正常


因此,即使在未使用名称空间的情况下,项目中的类与名称空间同名也会导致问题。显然,现在我知道了原因,有一个简单的方法可以解决这个问题。但是,这是一个应该提交给Microsoft的“bug”吗?

您是否自己编辑InitializeComponent()?为什么在新的someEntry语句之前声明someEntry字段?不,我没有重命名它,它也没有定义多次。它是我放在表单上的一个用户控件。用户控件相当简单,基本上没有添加UI元素、一个属性和一个虚拟方法。如果我使用codebehind添加控件,而不是将其放在主窗体上,那么它会工作。但是如果我把它放在主窗体上,它会给我上面的错误。现在这更奇怪了。我创建了一个没有任何内容的testusercontrol。如果我把它从工具箱拖到表单上,我会得到同样的错误。
namespace WinFormTestX
{
    public class WinFormTestX
    {
        public int ID { get; set; }
    }
}