以下方法之间的调用不明确:Identical.NameSpace.InitializeComponent()和Identical.NameSpace.InitializeComponent()

好吧,我怀疑这可能是Visual Studio的事情,但必须有一些原因。 我从默认项目列表中创建了一个ListBox(右键单击项目,或项目中的文件夹 – >添加 – >新项目 – > Xaml ListBox)。 我立刻得到了一条带有错误的红色波浪线:

“错误2以下方法或属性之间的调用不明确:’Identical.NameSpace.ListBox1.InitializeComponent()’和’Identical.NameSpace.ListBox1.InitializeComponent()’C:\ Documents and Settings \ ouflak \ My Documents \ Visual Studio 2010 \ Projects \ Identical \ NameSpace \ ListBox1.xaml.cs 27“

所有相关代码都是自动生成的,并且出错的原因是两个自动生成的文件之间存在冲突:ListBox1.g.cs和ListBox1.designer.cs,其中public void InitializeComponent()都在两者中声明。 当然,在这种情况下代码无法编译。 只需删除ListBox1.designer.cs就可以了,我想继续前进。 但我的问题是:为什么此代码会自动生成此错误? 我希望自动生成的任何东西都能够构建和编译,而无需触摸项目或任何代码。 对于您可以添加的几乎所有其他toobox项目,情况就是如此。 那么为什么要使用内置错误生成此代码呢? 我们应该找到一些方法来完成这项工作吗? 这段代码仅仅是一个建议,由IDE用户/开发人员来决定细节吗?

这是生成的代码:ListBox1.xaml:

   Item 1 Item 2 Item 3  

ListBox1.g.cs:

 namespace Identical.Namespace { ///  /// ListBox1 ///  [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] public partial class ListBox1 : System.Windows.Controls.ListBox, System.Windows.Markup.IComponentConnector { private bool _contentLoaded; ///  /// InitializeComponent ///  [System.Diagnostics.DebuggerNonUserCodeAttribute()] public void InitializeComponent() { if (_contentLoaded) { return; } _contentLoaded = true; System.Uri resourceLocater = new System.Uri("/MyProject;component/namespace/listbox1.xaml", System.UriKind.Relative); #line 1 "..\..\..\namespace\ListBox1.xaml" System.Windows.Application.LoadComponent(this, resourceLocater); #line default #line hidden } [System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { this._contentLoaded = true; } } } 

ListBox1.designer.cs:

 namespace Identical.NameSpace { using System; public partial class ListBox1 : System.Windows.Controls.ListBox { private void InitializeComponent() { // Pre Statements... string string1 = "Item 1"; string string2 = "Item 2"; string string3 = "Item 3"; // Statements... this.BeginInit(); this.Items.Add(string1); this.Items.Add(string2); this.Items.Add(string3); this.EndInit(); // Post Statements... } } } 

最后是ListBox1.xaml.cs(仅修改以防止XML文档和Stylecop警告):

 namespace Identical.NameSpace { ///  /// ListBox1 class ///  public partial class ListBox1 : ListBox { ///  /// Initializes a new instance of the ListBox1 class ///  public ListBox1() { this.InitializeComponent(); } } } 

而已。 这是完全处于自动生成状态的代码,但我放入xaml.cs文件的注释除外。

我搜索过这个网站和互联网,但似乎没有人解释过这种行为。 我可能会删除designer.cs代码并继续。 但是,如果有人知道为什么这首先出现在这里,或者它确实是Visual Studio 2010专业版中的错误,我真的很想知道。

看来你已经在类的两个地方声明了InitializeComponent方法,可能在每个分部类中都有一个。 尝试在Visual Studio中搜索所有文件中的InitializeComponent ,我猜测结果会列出声明它的两个地方。 删除一个,错误将消失。


更新>>>

我不确定你在这里期待什么样的答案……很明显,如果你没有添加其中一个InitializeComponent方法定义,那么visual Studio就有一个bug。 我非常怀疑除了它是一个bug之外,还有任何逻辑上的原因。

更新2 >>>

我在Microsoft Connect网站上查看过任何现有报告的错误,但是找不到任何错误…如果您想向他们报告,我已将链接保留在此处。

在控件之间复制我的XAML时遇到了这个问题。 我只需要更改我的x:Class =“mynamespace”,其中mynamespace是项目的正确命名空间。 重新编译,一切都恢复正常。

我的问题是给我模糊调用的项目引用了它自己的dll。 这导致该方法从dll以及实际项目中引用。 一旦我从引用中删除了dll,模糊的调用错误就消失了。

如果您对使用Resharper的方式没有警惕和谨慎,可能会发生这种情况。

当我在编码时允许Resharper自动导入引用时,这发生在我身上。

因此,最初输入错误,然后编辑我正在处理的代码,我没有检查它导入的内容。 遇到同样的问题后,我意识到在同一个库中有一个自引用。 所以有问题的方法有双重实现。

这两个类都是部分的,这意味着它们彼此共享非私有字段和方法。

ListBox1有两个InitializeComponent (共享)方法。 更改ListBox1的命名空间将解决此错误。

我认为InitializeComponent()在同一个类中的两个不同位置声明。

尝试使用CTR + F查找两个类定义,然后解决歧义问题。

我遇到了这个问题,使用了用户控件和相关的样式。 我想我曾尝试将一些逻辑移到样式类中,但它没有用,所以我解除了它,但显然有些东西被遗忘了。

它还抱怨_contentLoaded变量,所以我尝试删除那里的那个,并且错误消失了,并没有被另一个错误替换。 然后我按F12转到_contentLoaded的定义,发现它在样式类的* .g文件中。 虽然文件是以样式命名的,但是内部类是以用户控件命名的。

我删除了bin和obj文件夹来解决它。

我设法通过使用文本编辑器查看.csproj文件并查找表适配器XSD文件的名称来解决此问题。 我发现两个引用它的一个具有不同的别名,因此我收到此错误消息的原因。

我刚刚解决了这个问题。

它发生在我复制表单期间或之后的某个时刻,在WinForms程序中,然后将其重命名为blah_Copy。

主cs文件和设计器cs文件都是部分类。 因此,如果一个方法在两者中定义并且它具有相同的名称和参数(或相同的名称和相同的没有参数),/相同的签名然后它将发生冲突。

在我的情况下,它们都是Initialize(){..}定义,具有相同的主体,所以我很容易删除一个。

还可以说这个方法是Initialize()(在我的例子中)。 如果你去打电话给自己,然后点击F12,它将转到定义中的一个((或者甚至可能至少一个)。