[wpf] Имя «InitializeComponent» не существует в текущем контексте


14 Answers

Действие сборки для .xaml-файла также должно быть установлено на «Страница», при перемещении файла xaml между проектами этот параметр теряется (по крайней мере, в VS 2010).

Question

Если я создам новый проект в Visual Studio 2010 с пакетом обновления 1 и выберите «Приложение WPF» и попытается создать сгенерированное приложение, я получаю ошибку

Имя «InitializeComponent» не существует в текущем контексте.

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

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

Что не так?




Это решило это для меня.

Я прокомментировал ресурсы в файле App.xaml

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <!--<ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>-->
  </Application.Resources>
</Application>

Комментирование thiis назад для исправления ошибки сборки.

<Application x:Class="MyApp.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Application.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary
            Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>
</Application>

Копая немного глубже, я обнаружил, что файл app.g.cs в {Project} \ obj \ debug содержал только следующее, когда я оставил комментируемый ресурс.

/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
    if (_contentLoaded) {
        return;
    }
    _contentLoaded = true;
    System.Uri resourceLocater = new System.Uri("/MyApp;component/app.xaml", System.UriKind.Relative);

    #line 1 "..\..\..\App.xaml"
    System.Windows.Application.LoadComponent(this, resourceLocater);

    #line default
    #line hidden
}



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




это произошло со мной, когда я случайно удалил ссылку на класс из определения xaml:

Я заменил

<Window x:Class="myapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

первая строка с этим:

<RibbonWindow 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

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




Я столкнулся с этим, переименовывая usercontrol. То, как я исправил это, - это прокомментировать InitializeComponent, убедиться, что все имена были правильными (xaml и код позади), построить проект, раскомментировать InitializeComponent, а затем снова построить. Похоже, что может возникнуть пара причин / решений для этой проблемы, но этот способ сделал это для меня.




Если Пространства имен верны, то также есть одна и та же ошибка,

Просто закройте приложение и откройте его снова .

Это может решить вашу проблему




Еще одно возможное объяснение заключается в том, что вы строите против x86. Щелкните правой кнопкой мыши свое решение и выберите Configuration Manager. Посмотрите, строите ли вы против x86 вместо Any CPU.




Для этого есть очень конкретная причина, и она находится в настройках проекта. Это обычно происходит, когда вы пытаетесь добавить элемент управления WPF / окно в библиотеку или проект класса .NET 2.0. Причина этой ошибки заключается в том, что проект не знает, что он создает элемент управления WPF или окно и поэтому пытается построить его как проект C # 2.0.

Решение включает в себя редактирование файла .csproj. Щелкните правой кнопкой мыши на проекте, вызывающем проблему, и выберите «Выгрузить проект». Щелкните правой кнопкой мыши выгруженный проект и выберите «Изменить .csproj». Откроется файл .csproj, и вы увидите XML. найдите следующую строку:

<Import Project=…..

Это ближе к концу файла, и единственная строка, которая у вас есть, вероятно,

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

Это говорит Visual Studio, что проект будет реализован как проект .NET 2.0. Мы хотим сказать, что Visual Studio это проект WPF, поэтому мы должны добавить следующую строку:

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Эта строка сообщит Visual Studio, что проект будет реализован как проект WPF. Теперь ваше дно файла .csproj должно выглядеть так:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Сохраните файл .csproj, щелкните его правой кнопкой мыши в обозревателе решений и выберите «Перезапустить проект», и все, все готово!




У меня это было (хотя это была моя ошибка и осталась после того, как я скопировал и вложил код); это может произойти, когда пространство имен не совпадает между XAML и кодом позади

НАПРИМЕР

<UserControl x:Class="DockPanel.TreeView" />

и код позади

namespace NotThePanelItShouldBe



У меня была такая же проблема, мне пришлось преобразовать свой общий проект в переносимую библиотеку классов.




Это произошло со мной, потому что деинсталлятор пакета Nuget сдул все атрибуты элемента <Application> в App.xaml. Это включает атрибут x: Class, который определяет имя класса приложения. Таким образом, неполный класс, содержащий метод InitializeComponent (), никогда не генерировался.

Я исправил проблему, вернув App.xaml в исходную копию.







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

Чтобы исправить это, я просто изменил пространство имен в XAML на INCORRECT, сохраненный, а затем изменил его на CORRECT. Вуаля!




Выгрузите все решение, а затем снова загрузите его. Затем перестройте решение. Это решило проблему для меня.




Я просто столкнулся с этой проблемой, и оказалось, что мой проект хранится в моей папке пользователя, которая хранится в сети, и у нас был кратковременный перерыв в сети. Я сделал сборку; он жаловался, что мои файлы были изменены вне редактора (они не были, блокировки файлов только что были обработаны), и он был создан отлично, удалив ошибку в отношении метода InitializeComponent() .

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






Related