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

Хорошо, я подозреваю, что это может быть вещь Visual Studio, но для этого должна быть какая-то причина. Я создал из списка элементов по умолчанию ListBox (Щелкните правой кнопкой мыши по проекту или папке в проекте → Добавить → Новый элемент → Xaml ListBox). Сразу же я получаю красную squiggly линию с ошибкой:

"Ошибка 2 Вызов неоднозначен между следующими методами или properties: 'Identical.NameSpace.ListBox1.InitializeComponent()' и 'Identical.NameSpace.ListBox1.InitializeComponent()' C:\Documents and Настройки\ouflak\Мои документы \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 профессионал, я бы очень хотел знать.

Ответ 1

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


ОБНОВЛЕНИЕ → >

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

ОБНОВЛЕНИЕ 2 → >

Я посмотрел на веб-сайт Microsoft Connect для любых существующих сообщений об ошибках, подобных этому, но не смог найти... Я оставил ссылку здесь, если вы хотите сообщить об этом им.

Ответ 2

У меня была эта проблема при копировании моего XAML между элементами управления. Мне просто нужно было изменить мое x: Class= "mynamespace", где mynamespace - это правильное пространство имен для вашего проекта. Перекомпилирован, и все нормализовалось.

Ответ 3

Моя проблема заключалась в том, что проект, который давал мне двусмысленный звонок, имел ссылку на собственную DLL. Это заставило ссылаться на этот метод из dll, а также в фактическом проекте. Как только я удалил dll из ссылок, ошибка двусмысленного вызова исчезла.

Ответ 4

Может случиться, если вы не будете внимательны и осторожны в том, как вы используете Resharper.

Это случилось со мной, когда я разрешил Resharper автоматически импортировать ссылки во время кодирования.

Итак, сначала с ошибкой, затем отредактировав код, над которым я работал, я не проверял, что он импортировал. После того, как я столкнулся с той же проблемой, я понял, что в одной и той же библиотеке есть самооценка. Таким образом, были двойные реализации рассматриваемого метода.

Ответ 5

Оба класса являются частичными, что означает, что они разделяют друг другу не частные поля и методы.

В вашем ListBox1 есть два метода InitializeComponent (общий). Изменение пространства имен либо ListBox1 разрешит эту ошибку.

Ответ 6

Я думаю, что InitializeComponent() объявлен в двух разных местах в одном классе.

Попробуйте найти определения классов с помощью CTR + F, а затем разрешите решение двусмысленности.

Ответ 7

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

Он также жаловался на переменную _contentLoaded, поэтому я попытался удалить ту, которая была там, и ошибка исчезла и не была заменена другой ошибкой. Затем я нажал F12, чтобы перейти к определению _contentLoaded и обнаружил, что он был в *.g файле для класса стиля. Хотя файл был назван в честь стиля, класс внутри был назван в честь пользовательского элемента управления.

Я удалил папки bin и obj, чтобы решить эту проблему.

Ответ 8

Мне удалось разрешить это, заглянув в файл .csproj с помощью текстового редактора и поиская имя файла XSD Table Adapter. Я нашел две ссылки на него с другим псевдонимом, поэтому я получил это сообщение об ошибке.

Ответ 9

Я только что и решил эту точную вещь.

Это произошло в какой-то момент во время или после того, как я дублировал форму в программе WinForms, а затем переименовал ее в blah_Copy.

Основной файл cs и файл cs конструктора являются частичными классами. Поэтому, если метод определен в обоих и имеет одно и то же имя и параметры (или одно и то же имя и одинаковые никакие параметры),/то же подписи, тогда он столкнется.

В моем случае оба они оба понятия Initialize() {..} имели одинаковые тела, поэтому я легко удалял их.

Также скажем, что метод Initialize() (это было в моем случае). Если вы перейдете на вызов, нажмите F12, чтобы перейти к одному из (или, возможно, хотя бы одного) определений.

Ответ 10

Я исправил эту проблему, очистив папки bin и obj. Вы можете попытаться удалить эти две папки, а затем пересобрать решение.