C# Visual Studio 2010不断更改我的winforms控件
在VS2010中,我有一个奇怪的用户控件情况。表单设计器不断更改我的条目,然后告诉我它不存在!它第一次编译并运行,如果我更改了一些不相关的内容,它会在designer.cs文件中给我一个错误(无法解析符号SomeEntry) 如果我删除MyNameSpace。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
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; }
}
}