Имя "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
Для тех, у кого нет ошибок в режиме отладки, но есть указанная ошибка в режиме выпуска (и все же проект работает нормально), попробуйте выполнить следующее:
- Откройте файл XAML, соответствующий нарушающему файлу xaml.cs.
- Сделайте правку - любую правку, например, добавьте пробел где-нибудь
- Сохраните файл и закройте его
Этот метод работал для меня в 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" ).
Исправьте их одинаковыми.
Ответ 25
Я обнаружил, что "объект запуска" был (не задан), вызвав эту ошибку для меня.
"Объект запуска" (не задано)
Ответ 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 создана страница.