Visual Studio 2010 设计器生成无效代码

3
这对我来说是第一次,我以为我已经完全失去了理智。我有一个简单的winform应用程序,在其中添加一个datagridview。我设置了dgv的数据源,使用了半打其他项目中使用的相同来源,并按照自己的意愿配置了网格。此时表单上除了网格之外没有其他东西,项目现在包含数据集、绑定源和表适配器。很好。然而,设计师生成的代码无效,导致编译错误,告诉我数据集表适配器对象和数据集本身不存在。
如果我进入设计师出现编译错误的地方,我会看到以下行:
this.tILEDataSet = new ImageEdit.TILEDataSet();
this.logosTableAdapter = new ImageEdit.TILEDataSetTableAdapters.LogosTableAdapter();

ImageEdit是我添加的绑定控件所在的类。如果我删除"ImageEdit.",代码就可以编译并正常运行。当然,由于这是一个设计器生成的文件,只要我做任何其他更改,它就会恢复到问题的那段代码。

我已经进行了三次尝试,使用了三个不同的项目,其中两次都是从Visual Studio的新实例开始。

可能发生了什么问题导致出现这种情况?是否有任何解决方法,除了手动编辑设计器文件(我从不喜欢这样做)?

我没有更改任何内容,所有内容都是设计器生成的。命名空间和类都被创建为ImageEdit。设计器包含以下定义: private TILEDataSet tILEDataSet; private TILEDataSetTableAdapters.LogosTableAdapter logosTableAdapter;

设计器类定义确实是从global::System.ComponentModel.Component派生的:

public partial class LogosTableAdapter : global::System.ComponentModel.Component {
    .
.
.

再次感谢您的任何见解。


1
编译器错误是什么(确切地说)?其中将会有答案。 - Tergiver
确切的错误信息: 类型名称“TILEDataSetTableAdapters”在类型“ImageEdit.ImageEdit”中不存在。 类型名称“TILEDataSet”在类型“ImageEdit.ImageEdit”中不存在。 - Gary
1
你在使用设计器添加数据集和适配器后,是否更改了 ImageEdit 所在的命名空间?通常设计器会生成非常冗长的类型名称,但这些看起来并不冗长(缺少 global::)。我们需要查看定义 ImageEdit 的文件以及整个由设计器生成的文件,才能做出进一步的猜测。 - Tergiver
我没有改变任何东西,一切都是由设计师生成的。命名空间和类都被创建为ImageEdit。 - Gary
3个回答

7
我猜想你的解决方案中有几个名为ImageEdit的成员,无论它们是命名空间、类还是其他成员。在微软的名称指南中,特别是命名空间的名称,他们建议:

要在命名空间名称前加上公司名称,以防止不同公司的命名空间使用相同的名称和前缀。

不要在一个命名空间中同时使用相同名称的命名空间和类型。例如,不要将Debug用作命名空间名称,并在同一命名空间中提供名为Debug的类。多个编译器要求这些类型必须完全限定。

不要在单个应用程序模型中的命名空间中给类型相同的名称。
例如,如果你正在编写一个专门用于Windows窗体应用程序开发人员使用的控件库,则不应引入一个名为Checkbox的类型,因为应用程序模型(CheckBox)中已经存在该名称的类型。

仅仅第二条就足以解决你的问题。使用第一条,将公司名称作为命名空间的一部分,将会使代码生成器为你的对象提供更简洁的名称,例如:
this.tILEDataSet = new MyCompany.ImageEdit.TILEDataSet();
this.logosTableAdapter = new MyCompany.ImageEdit.TILEDataSetTableAdapters.LogosTableAdapter();

处理好了,非常感谢。我使用了重构工具来更改命名空间,问题已经解决了。 - Gary

0

如果您在任何配置中请求命名空间时,输入与您的项目相同的名称或命名空间,也可能发生这种情况:

enter image description here

这会导致与您现有的命名空间发生冲突:

enter image description here

只需使用除您代码中已有的命名空间之外的任何其他名称即可。


0

我知道这是一个旧的线程,但当我遇到同样的问题时,我偶然发现了它。我认为生成的代码引起问题的原因是因为我在保存新表单之前创建了表单并添加了DataGridView并链接到数据源。如果我先创建表单,保存它,添加DataGridView,保存表单,然后链接数据源并保存它,我就不再遇到这个问题了。可能与代码生成器无法看到未保存的代码有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接