Имя "InitializeComponent" не существует в текущем контексте

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

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

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

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

Что случилось?

Ответ 1

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

Итак, проверьте, сделали ли вы то же самое.

Названия namespace и class должны совпадать, поскольку они являются частью частичного класса

namespace ZZZ
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
         //...
    }
}

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">

Ответ 2

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

Ответ 3

Для тех, у кого нет ошибок в режиме отладки, но есть указанная ошибка в режиме выпуска (и все же проект работает нормально), попробуйте выполнить следующее:

  1. Откройте файл XAML, соответствующий нарушающему файлу xaml.cs.
  2. Сделайте правку - любую правку, например, добавьте пробел где-нибудь
  3. Сохраните файл и закройте его

Этот метод работал для меня в VS 2015, и, по словам других пользователей, также 2017 и 2019

Ответ 4

Здесь есть очень конкретная причина, и это в настройках проекта. Это обычно происходит, когда вы пытаетесь добавить элемент управления WPF/окно в библиотеку или проект класса .NET 2.0. Причина этой ошибки в том, что проект не знает, что он создает элемент управления WPF или окно и поэтому пытается построить его как проект С# 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, щелкните его правой кнопкой мыши в обозревателе решений и выберите "Перезапустить проект", и все, что вы сделали!

Ответ 5

  • Перейдите в каталог решений
  • Удалить папку \obj
  • Восстановить решение

Я столкнулся с этой ошибкой во время рефакторинга, где я переименовал некоторые файлы/папки, и файлы предварительного кодирования *.g.cs, необходимые для повторного создания.

Ответ 6

это произошло со мной, когда я случайно удалил ссылку на класс из определения 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">

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

Ответ 7

Убедитесь, что в файле xaml

<Page x:Class="Project1.Page1" ...

соответствуют имени 'Project1' и имени 'Page1

Ответ 8

Вы можете получить эту ошибку при импорте класса из другого проекта или изменении пути к файлу xaml или в пространстве имен файла xaml или за .cs.

Один: У него может быть пространство имен, которое не совпадает с тем, что у вас есть в новом проекте

namespace TrainerB.MVC.Forms
{
     public partial class AboutDeveloper : ContentPage
     {
          public AboutDeveloper()
          {
               InitializeComponent();
          }
     }
}

Как вы видите, пространство имен в импортированном файле начинается со старого имени проекта: "TrainerB" , но ваш новый проект может иметь другое имя, поэтому просто измените его на правильный новый имя проекта, как в файле .xaml, так и в файле .cs.

Два:

измените свойства файла .xaml на:

Действие сборки: Встроенный ресурс

Пользовательский инструмент: MSBuild: UpdateDesignTimeXaml

Свойства файла Xaml

Исправление пространства имен Xaml 01

Xaml Namespace Correcting 02

Ответ 9

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

EG

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

и код

namespace NotDockPanel

Ответ 10

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

Ответ 11

Проверьте файл Designer.

У меня была такая же проблема. В моем случае причина была в том, что namespace для FileName.Designer.cs не соответствует (правильному) namespace, используемому в FileName.cs.

Изменение namespace FileName.Designer.cs для соответствия с FileName.cs решило проблему немедленно.

Ответ 12

Ни один из вышеперечисленных ответов не работал у меня. Я попробовал их всех, кроме дубликатов. Однако по какой-то странной причине это работало в моем кросс-платформенном проекте в Visual Studio 2015:

  • Щелкните правой кнопкой мыши проект, который вызывает проблему в обозревателе решений. Во всплывающем меню выберите: Добавить → Класс
  • Выберите кросс-платформенную страницу → Forms Xaml. Сохраните стандартное имя стандартного Page1.cs и нажмите "Добавить".
  • Обратите внимание, что предыдущая проблема InitializeComponent() исчезла по какой-то причине.
  • Удалить вновь созданный файл Page1.cs и продолжить программирование, как если бы Visual Studio работала нормально.

Ответ 13

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

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

Ответ 14

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

Ответ 15

Если вы используете Xamarin Forms, и вы перемещаете файл XAML, "действие сборки" файла изменяется. Xamarin Forms требует "build action = Embedded Resource".

Применить "действие сборки" в Visual Studio:

Select the XAML file -> Properties -> Build Action = Embedded Resource

Ответ 16

Другой распространенной причиной этой ошибки является то, что вы сделали что-то в этом:

  • Щелкните правой кнопкой мыши по папке в проекте, чтобы создать новый UserControl. Это создает файл класса и xaml, который выводится из пользовательского элемента управления в пространстве имен папки.

  • Затем вы решите изменить пространство имен класса, потому что вы действительно используете папки для организации кода. Атрибут x: Class не будет автоматически обновляться, поэтому он будет искать класс, который не существует. Вероятно, возможно использовать лучшее сообщение об ошибке типа "x: Class не может быть найдено в namesace bla.blaa.blaaa."

Ответ 17

Я пробую все предложения выше. Если вы попробуете слишком без успеха, получите более простой способ. Создайте новый page.xaml, затем скопируйте код для нового класса и удалить класс XAML с проблемами. Не трать больше времени.

Ответ 18

Другим решением этой проблемы является простое изменение свойства- > Строить действие на XAML из Embedded Resource на что-либо еще, сохранить, а затем изменить его прямо на Embedded Resource. Ошибка исчезнет.

Ответ 19

Я знаю, что на это ответили по другой причине, но это очень популярное сообщение, и я столкнулся с той же проблемой с библиотекой классов. В этом случае это оказалось как изменением в моем пространстве имен (ответ в этом посте здесь), так и тем, что компилятор не смог перестроить Window.g.i.cs, который определяет метод InitializeComponent(). Не удалось, потому что в библиотеке классов отсутствовало значение ProjectTypeGuid для проектов WPF в файле csproj. Инструкции для этого приведены здесь и здесь. Я думал, что поделюсь, если кто-то столкнется с той же проблемой. В этом случае недостаточно просто изменить пространство имен.

Ответ 20

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

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

Ответ 21

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

Я прокомментировал ресурсы в файле 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>

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

<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
}

Ответ 22

Для тех, кто находит это в Интернете. Проверьте файл Windows.csproj, если существует компиляция. Должно быть 2 записи

<Page Include="YourFile.xaml">
  <SubType>Designer</SubType>
  <Generator>MSBuild:Compile</Generator>
</Page>

<Compile Include="YourFile.xaml.cs">
  <DependentUpon>YourFile.xaml</DependentUpon>
</Compile>

Ответ 23

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

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

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

Ответ 24

После некоторого действия пространство имен файла .cs и файла в .xaml может быть другим (в xaml найдите x: Class= "namespace.yourType" ).

Исправьте их одинаковыми.

Ответ 26

Так как это, по-видимому, относится к теме, касающейся отсутствия "InitializeComponent", я включу здесь свой ответ.

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

В нашем проекте мы используем компоненты Metro из MahApps. Представление, которое вызывало у меня проблемы, было видом, наследующим от MetroWindow, следующим образом:

<Controls:MetroWindow x:Class="ProjectNamespace.MyView"
                      xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                      ... >

Теперь я определил свои статические ресурсы как

<Controls:MetroWindow.Resources>
    <prop:Resources x:Key="LocalizedStrings"/>
    ...
</Controls:MetroWindow.Resources>

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

Это было, однако, не в случае с Controls:MetroWindow! Там мне абсолютно необходимо определение ресурса следующим образом:

<Controls:MetroWindow.Resources>
    <ResourceDictionary>
        <prop:Resources x:Key="LocalizedStrings"/>
        ...
    </ResourceDictionary>
</Controls:MetroWindow.Resources>

Итак, моя проблема, в общем, отсутствовала тег <ResourceDictionary>. Я действительно не знаю, почему это произвело ошибку InitializeComponent, и это странно даже не производило ее на каждой моей машине, но так, как я ее исправил. Надеюсь, что это поможет (оставшиеся 0.001% людей сталкиваются с этой проблемой).

Ответ 27

Итак, я понимаю, что это старый вопрос, но у нас была аналогичная проблема. Мы смогли построить проект с использованием VS2012, но не используя msbuild из командной строки. Я зашел в файл .proj и заметил, что у него нет записи для "ProjectTypeGuids" в разделе "PropertyGroup" по умолчанию, поэтому я добавил следующее:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

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

Ответ 28

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

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

Ответ 29

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

Ответ 30

По какой-то причине после копирования .xaml и его .cs между проектами, действие сборки иногда меняется. Убедитесь, что для сборки .xaml создана страница.