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

时间:2013-12-06 09:41:17

标签: c# wpf visual-studio xaml toolbox

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

  

“错误2以下方法或之间的调用不明确   properties:'Identical.NameSpace.ListBox1.InitializeComponent()'和   'Identical.NameSpace.ListBox1.InitializeComponent()'C:\ Documents and   设置\ 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:

< ?xml version="1.0" encoding="utf-8" ? > 
< ListBox
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:xc="http://ns.neurospeech.com/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    x:Class="Identical.NameSpace.ListBox1"
    >
    <sys:String>Item 1</sys:String>
    <sys:String>Item 2</sys:String>
    <sys:String>Item 3</sys:String>
< /ListBox>

ListBox1.g.cs:

namespace Identical.Namespace
{
    /// <summary>
    /// ListBox1
    /// </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
    public partial class ListBox1 : System.Windows.Controls.ListBox, System.Windows.Markup.IComponentConnector {

        private bool _contentLoaded;

        /// <summary>
        /// InitializeComponent
        /// </summary>
        [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
{
    /// <summary>
    /// ListBox1 class
    /// </summary>
    public partial class ListBox1 : ListBox
    {
        /// <summary>
        /// Initializes a new instance of the ListBox1 class
        /// </summary>
        public ListBox1()
        {
            this.InitializeComponent();
        }
    }
}

就是这样。这是完全处于自动生成状态的代码,但我在xaml.cs文件中添加的注释除外。

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

12 个答案:

答案 0 :(得分:12)

您似乎已在类中的两个位置声明了InitializeComponent方法,可能在每个分类中有一个。尝试在Visual Studio中搜索InitializeComponent的所有文件,我猜测结果将列出声明它的两个位置。删除一个,错误就会消失。


更新&gt;&gt;&gt;

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

更新2&gt;&gt;&gt;

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

答案 1 :(得分:9)

在控件之间复制XAML时出现此问题。我只需要改变我的x:Class =&#34; mynamespace&#34;其中mynamespace是项目的正确名称空间。重新编译,一切都恢复正常。

答案 2 :(得分:3)

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

答案 3 :(得分:3)

如果您对使用Resharper的方式没有警惕和小心,可能会发生。

当我在编码时允许Resharper自动导入引用时,发生了这种情况。

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

答案 4 :(得分:1)

这两个类都是部分的,这意味着它们彼此分享非私人领域和方法

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

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

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

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

我刚刚解决了这个问题......

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

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

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

另外,假设该方法是Initialize()(在我的情况下)。如果你打电话给自己,然后按F12,它将转到定义中的一个(或者甚至可能是至少一个)。

答案 9 :(得分:1)

一次更改一堆文件后,我遇到了同样的问题,这是我的解决方法:

  • 在解决方案资源管理器中找到解决方案(视图->解决方案资源管理器)
  • 右键单击解决方案,然后单击“清洁解决方案”

..就是这样! Visual Studio有时可能很奇怪。.

答案 10 :(得分:0)

我通过清理binobj文件夹来解决此问题。您可以尝试删除这两个文件夹,然后重新构建解决方案。

答案 11 :(得分:0)

在复制和粘贴以及在代码中重命名新类之后,还要打开设计器并在XAML的第一行中更改名称。生成项目。固定!