Вызов неоднозначен между следующими методами: идентичный.пространство имен.InitializeComponent () и идентичный.пространство имен.метод InitializeComponent()

хорошо, я подозреваю, что это может быть Visual Studio, но для этого должна быть какая-то причина. Я создал из списка элементов по умолчанию список (щелкните правой кнопкой мыши проект или папку в project -> Add -> New Item -> Xaml ListBox). Сразу же я получаю красную волнистую линию с ошибкой:

"Ошибка 2 вызов неоднозначен между следующих методов или свойства: 'идентичные.пространство имен.Список listbox1.Метод initializecomponent () и - Идентичные.пространство имен.Список listbox1.InitializeComponent ()' C:Documents и НастройкиouflakМои ДокументыVisual Studio 2010ПроектыИдентичныеПространство ИменListBox1.код XAML.в CS 27"

весь код, о котором идет речь, генерируется автоматически, и причина ошибки заключается в конфликте между двумя автоматически генерируемыми файлами: ListBox1.г.CS и список listbox1.дизайнер.cs где public void InitializeComponent () объявляется в обоих. Естественно, код не может компилироваться при таких обстоятельствах. Это достаточно просто удалить ListBox1.дизайнер.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.г.СЅ:

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 "......namespaceListBox1.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.дизайнер.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 код и двигаться дальше. Но если кто-нибудь знает, почему это здесь в первую очередь, или если это действительно ошибка в Visual Studio 2010 professional, я бы очень хотел знать.

9 ответов


похоже, что вы объявили InitializeComponent метод в двух местах в вашем классе, вероятно, по одному в каждом частичном классе. Попробуйте найти во всех файлах InitializeComponent в Visual Studio, и я предполагаю, что результаты будут перечислены два места, где он объявлен. Удалите один, и ошибка исчезнет.


обновление >>>

Я не уверен, какого ответа вы ожидаете здесь... ясно, если вы не добавили один из этих InitializeComponent определения методов, затем visual В студии есть ошибка. Я очень сомневаюсь, что для этого может быть какая-то логическая причина, кроме того, что это ошибка.

обновление 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, он перейдет к одному из (или, возможно, даже по крайней мере одному) определений.