Назва "InitializeComponent" не існує в поточному контексті


383

Якщо я створюю новий проект у Visual Studio 2010 SP1 і вибираю "WPF Application" і намагаюся створити створений додаток, я отримую помилку

Назва "InitializeComponent" не існує в поточному контексті.

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

Я створив новий проект і отримував помилку щоразу, коли складав проект. Я щойно надіслав проект колезі, і він щойно склав без помилок.

Що не так?


3
Ця помилка користувача виглядає як легко вирішити, просто просте визначення x: Class. Поки не все нормально, розробник повинен приділяти більше уваги, але що робити, якщо це не помилка, а привид помилки з тим же повідомленням про помилку? Я читав багато різних шляхів вирішення проблем вуду з 2012 року. Це допоможе від VS набагато чіткіше повідомлення про помилку і КУРСИТИ виправлення помилок привидів з тим же повідомленням. Розробники з 2012 року змінюють конфігурацію збірки з файлів, проектів, копіюють проект, видаляють файли з папки додатків, перезапускають VS тощо. Bravo MS ... помилка 4 роки і все ще старіє!
juagicre

2
Для будь-яких майбутніх читачів цього питання: Ця проблема, мабуть, має багато можливих джерел. У моєму випадку перші кілька відповідей не допомогли, але одна з подальших відповідей була правильною.
MOnsDaR

Проблема для мене @MOnsDaR файлу дизайнера стала проблемою.
Ctrl S

Хоча це може бути викликано багатьма речами (простір імен перейменований \ тип сторінки - MSBuild), я врешті знайшов рішення для того, що було причиною цього в проекті, який я успадкував. У файлах .csproj мені довелося змінити "ToolsVersion" з 4 на 15 (VS 2017).
MrMikeJJ

Відповіді:


737

Я стикався з цим пару разів і постійно забуваю, що це викликає. Я наткнувся на це, коли я перейменував простір імен у своєму коді за файлом, але не в моєму XAML.

Тож перевірте, чи зробили ви те саме.

У просторі імен і клас імена повинні збігатися , так як вони є частиною часткового класу

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

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

10
Дякую, Шон Я прийшов сюди, щоб опублікувати цю відповідь, але ви вже мене побили. Саме це сталося, і це вирішило мою проблему. Ваш коментар повинен бути вище на графіках, оскільки це заощадило б мені 15 хвилин.
Магнум

2
Якщо назви класів не однакові, ви отримаєте ту саму помилку
reggaeguitar

2
Це відповідь. Не впевнений, чому його не обрали, але це воно, і я наткнувся на це кодування деяких Xamarin.Forms.
Маркус Шоклі

1
Під час рефакторингу обов’язково додайте коментарі та рядки (Visual Studio 2015)
Габріель GM

3
Для мене (у Xamarain.Forms) за допомогою проекту "Швидкий старт", завантаженого з Azure, це був пробіл / відступ між xmlns: x = " schemas.microsoft.com/winfx/2009/xaml " та x: Клас, який був проблема. Я видалив це і повторно ввів його, і він працював!
Джеймс

241

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


11
Це було зі мною. Дякую!
Ігнасіо Солер Гарсія

3
Після вставки для копіювання трапляється, що дія збірки xaml змінюється зі сторінки на Зміст
Роберто

4
Все ще трапляється у Visual Studio 2012 (оновлення 2)
gumo

8
Все ще трапляється у Visual Studio 2013
Кріс Рей

7
Серйозно ... чому Microsoft, чому? Ти ненавидиш мене / нас?
qwertoyo

106

Для тих , хто не має помилок в режимі налагодження, але робити мають зазначену помилку в режимі випуску (і все ж проект працює відмінно), ось що - то просто спробувати:

  1. Відкрийте файл XAML, що відповідає файлу xaml.cs.
  2. Зробіть редагування - будь-яке редагування, наприклад, десь додайте пробіл
  3. Збережіть файл і закрийте його

Цей метод працював для мене у VS 2015, а за словами інших користувачів, також у 2017 та 2019 роках


3
Ти сьогодні мій Герой. Дякую
Пітер Піт

14
Досить божевільно, це працювало для мене з VS2015. І він виправив усі помилки у всіх файлах XAML. Це дійсно момент WTF.
Вільям Денман

5
Данг, я просто знову опік цим. На щастя, я знайшов ту саму відповідь, яку я вже проголосував і прокоментував. Я справді повинен, але це як пост-це замітка на моєму моніторі.
Вільям Денман

3
Те саме у VS2017 і це виправило.
Ганс

2
Досі працює у VS2019 ...
soulflyman

29
  1. Перейдіть до каталогу рішень
  2. Видаліть папку \ obj
  3. Відновіть рішення

Я зіткнувся з цією помилкою під час рефакторингу, коли я перейменував деякі файли / папки та файли попереднього розміщення * .g.cs, необхідні для повторного генерування.


Здається, у мене така ж проблема, але це не спрацювало для мене.
LuckyLikey

Зробіть це, перевіривши, чи ваш xaml x:Classвідповідає Namespace.Class.
Джейк

tnx. цей простий трюк зробив це для мене.
gil adino

26

Для цього є дуже конкретна причина, і це в налаштуваннях проекту. Зазвичай це відбувається, коли ви намагаєтеся додати керування / вікно WPF до бібліотеки чи проекту .NET 2.0. Причиною цієї помилки є те, що проект не знає, що він будує елемент керування або вікно WPF, а тому намагається створити його як проект C # 2.0.

Рішення включає редагування файлу .csproj. Клацніть правою кнопкою миші на проект, що викликає проблему, і виберіть "Unload Project". Клацніть правою кнопкою миші розвантажений проект і виберіть "Редагувати .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, клацніть його правою кнопкою миші в Провіднику рішень і виберіть компіляцію «Перезавантажити проект», і все, все готово!


1
Я спробував це, перш ніж писав це питання, і це не допомагає. Я думаю, це трохи дивно, що я не можу скласти новий проект, але мій колега може ...
user876402

1
Я теж спробував це, і це не допомогло. Додавання нового імпорту призвело до нового попередження (див. Нижче), але початкова помилка все ще існує. "C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.WinFX.targets" неможливо знову імпортувати. Її вже імпортували на "C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.NETFramework.targets (76,3)". Це, швидше за все, помилка створення збірки. Цей наступний імпорт буде проігноровано. "
користувач316117

Я також просто спробував це і не вийшло ...?
Сізони

Дякую, це було виправлено для мене на проекті, який я успадкував.
MrMikeJJ

22

це сталося зі мною, коли я випадково видалив посилання на клас з визначення 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">

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


це було не зовсім моєю проблемою, але це допомогло мені локалізувати її. Після цього у мене був простір імен без назви класу
Rivenfall

Це працювало для мене. дякую
Sinaesthetic

Це допомогло мені знайти свою проблему, в моєму випадку я пропустив рядок x: Class, додавши це до виправленого для мене
apc

18

Ви можете отримати цю помилку під час імпорту класу з іншого проекту або змінити шлях до файлу 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 02


О Боже мій! дуже дякую за таке рішення. Я перевіряв кожне знайдене там рішення, і нічого не працює. Хитрість була у властивостях xamlфайлу. +1
IgniteCoders

16

Переконайтеся, що у файлі xaml

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

відповідати імені "Project1" та імені "Page1"


Це вирішило мою проблему.
октавіан

16

Перевірте файл конструктора .

У мене був цей самий випуск. У моєму випадку, причина в тому , що namespaceдля FileName.Designer.cs Не Відповідати (правильно) namespaceвикористовується в FileName.cs .

Зміна namespaceв FileName.Designer.cs збігається FileName.cs негайно вирішити цю проблему.


14

У мене це було (хоча це було дуже моєю провиною і було викликано після того, як я скопіював і вставив якийсь код); це може статися, коли простір імен не збігається між кодом XAML та кодом

EG

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

і код позаду

namespace NotDockPanel

Це змусило мене зрозуміти, що мій дизайнер має неправильний простір імен. Дякую!
Ctrl S

13

Я зіткнувся з цим під час перейменування usercontrol. Я виправив це: прокоментувати InitializeComponent, переконатися, що всі імена були правильними (xaml та код позаду), побудувати проект, відміняти InitializeComponent, а потім створити заново. Здається, що для цього питання може бути кілька причин / рішень, але цей спосіб зробив це для мене.


1
Я нічого не перейменував? Однак це рішення спрацювало для мене. * .G.cs та * .gics були відсутні у папці obj, коментуючи це та створюючи проект, генерували відсутні файли. Не впевнений, як він потрапив у цей стан.
finlaybob

11

Жодна з наведених відповідей не працювала для мене. Я спробував їх усіх, крім дублікатів. Однак з якоїсь дивної причини це працювало в моєму крос-платформенному проекті у Visual Studio 2015:

  1. Клацніть правою кнопкою миші проект, який викликає проблему в Провіднику рішень. У спливаючому меню виберіть: Додати -> Клас
  2. Виберіть крос-платформу -> Форми сторінки Xaml. Збережіть гарне стандартне ім’я Page1.cs та натисніть Додати.
  3. Зверніть увагу, як попередня проблема InitializeComponent () просто чомусь зникла.
  4. Видаліть щойно створений Page1.cs та продовжте програмування так, як ніби Visual Studio працює добре.

Цей працював на мене. Я зробив копію, вставлення та перейменування користувальницького управління, яке було у мене, коли InitializeComponent () почав виходити з ладу.
Рафаель Вентура

Як, на землі, ви натрапили на цю виправлення? Я спробував все інше, і це спрацювало. Використовуючи VS 2017, тому проблема актуальна.
blearyeye

Чудово, це для мене працює. Дуже дякую
IZI

9

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

Для виправлення я просто змінив простір імен у XAML на НЕПРАВНИЙ, зберег, а потім змінив його на ПРАВИЛЬНУ. Вуаля!


Я додав би це як коментар до правильної відповіді, але у мене немає відповіді на це :(
heights1976

Дякую за це! Працював для мене після того, як зійшов з розуму, пробуючи всілякі речі. Моє рішення спочатку будувалося без помилок, потім після того, як ПК деякий час спав, спробував ще раз і отримував помилку. Можливо, щось стосується режиму сну?
JeremyB

У мене було те саме питання і рішення. Я вважаю, що це було пов'язане з IntelliSense. Зміна простору імен у xaml, ймовірно, спричинила оновлення відповідних частин в IntelliSense db. Це лише здогад.
FishySwede

8

Якщо ви використовуєте форми Xamarin Forms та переміщуєте файл XAML, "дія збірки" файлу змінюється. Xamarin Forms вимагає "build action = вбудований ресурс".

Застосуйте "побудувати дію" у Visual Studio:

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


Ура для вас, пане / пані!
naspinski

7

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


7

Вивантажте весь розчин, а потім перезавантажте його ще раз. Потім відновіть рішення. Це вирішило для мене питання.


Спасибі працювали для мене!
Ізіон

6

Ще одна поширена причина цієї помилки - якщо ви щось зробили в цьому:

  1. Клацніть правою кнопкою миші на папці в проекті, щоб створити новий UserControl. Це створює файл класу та xaml, який походить від керування користувачем у просторі імен папки.

  2. Тоді ви вирішите змінити простір імен класу, оскільки ви дійсно використовуєте папки для організації коду. Атрибут x: Class не оновлюється автоматично, тому він буде шукати клас, який не існує. Можливо, можна скористатись кращим повідомленням про помилку на кшталт "x: Тип класу неможливо знайти в namesace bla.blaa.blaaa."


5

Ще одне рішення цієї проблеми - просто змінити властивість-> Створити дію на XAML з вбудованого ресурсу на будь-що інше, зберегти, а потім змінити його назад на вбудований ресурс. Помилка усувається.


Це працювало двічі;)
Flou

4

Я знаю, що на це відповіли через іншу причину, але це дуже вражаюча публікація, і я зіткнувся з тим же питанням із бібліотекою класів. У цьому випадку виявилося як зміна в моєму просторі імен (відповідь у цій публікації тут ), і компілятор не зміг відновити Window.gics, що визначає метод InitializeComponent (). Це не вдалось, оскільки у бібліотеці класів не було значення ProjectTypeGuid для проектів WPF у файлі csproj. Інструкції до цього є тут і тут . Я думав, що поділюсь у випадку, якщо хтось інший натрапив на те саме питання. У цьому випадку просто зміни простору імен недостатньо.


3

Це сталося зі мною, тому що видалення пакета Nuget вилучила всі атрибути елемента <Application> в App.xaml. Сюди входив атрибут x: Class, який вказує назву класу програми. Тож частковий клас, що містить метод InitializeComponent (), ніколи не створювався.

Я вирішив проблему, повернувши App.xaml до копії, керованої джерелом.


Я отримав таку ж помилку через відсутній атрибут x: Class, але це не мало нічого спільного з Nuget. Це просто якось зникло, певно, якусь візуальну студійну магію.
Ісмаїл Дегані

3

Це вирішило це для мене.

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

3

Для тих, хто знайде це в Інтернеті. Перевірте файл 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>

У моєму csproj я чомусь не вистачав, <DependentUpon>YourFile.xaml</DependentUpon>і саме це мене виправило!
Ісаак Бейкер

3

Якщо простори імен правильні, то також є та сама помилка,

Просто закрийте програму та відкрийте її знову .

Це може вирішити вашу проблему


відкрита та закрита візуальна студія ти маєш на увазі
LuckyLikey

Інколи XDesProc.exe (Microsoft Visual Studio XAML UI Designer) зупинить роботу Visual Studio належним чином і не завантажить файл xaml належним чином. Тож перезапуск Visual Studio вирішив мою проблему. (Ви також можете перейти до процесів у диспетчері завдань і зупинити лише цей процес без перезавантаження Visual Studio).
Syed Siraj Wajeed

Я виявив це у VS2017. Я змінив усе інше, і простори імен скрізь були правильними, але виклики InitializeComponent () мали помилку, а часткові ключові слова у файлах xaml.cs мали попередження, щось на кшталт "частковий клас має лише один файл". Я випадково закрив і знову відкрив рішення і виявив, що обидва ці проблеми вирішили самі.
Стів Крейн

3

Після деяких дій простір імен .cs-файлу та файлу у .xaml може бути різним (у xaml шукайте x: Class = "namespace.yourType").

Зафіксуйте їх однаковими.


3

Я виявив, що "об’єкт запуску" (Не встановлено) викликав цю помилку для мене.

"Об'єкт запуску" (не встановлено)


Всі інші конкретики, згадані у питанні, були однаковими?
marklark

2
Точна специфіка не є точною, враховуючи, що питання не було зрозумілим, як проявляється виняток. Однак основний симптом однаковий, тому я не бачу нічого поганого у своїй відповіді. Я мав намір додати до розмови, оскільки жодна відповідь / коментар не допомогла в моєму випадку. Я просто намагався додати до бази знань часто недискриптні помилки компіляції.
Рок

1
Дякую! Це вирішило мою проблему! Звісно ж , що даний варіант ( об'єкт Startup ) був автоматично скидається , коли я переїхав MainWindow.xaml з rootв Viewкаталог.
AlexMelw

3

Оскільки це, здається, є початковою темою проблеми щодо відсутнього "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>

Ось так я визначив Resources in UserControls у всіх своїх інших поглядах, тож я припускав, що це спрацює.

Однак це було не так Controls:MetroWindow! Там я абсолютно потребував визначення ресурсу таким чином:

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

Тож у моєму випуску, підсумовуючи це, було відсутнє <ResourceDictionary>тег. Я дійсно не знаю, чому це призвело до помилки "InitializeComponent", і це дивно навіть не створювало її на кожній моїй машині, але я це виправив. Сподіваюся, це допомагає (решта 0,001% людей, які стикаються з цією проблемою).


2

Я щойно зіткнувся з цією проблемою, і виявилося, що мій проект зберігається в моїй папці користувача, яка зберігається в мережі, і ми мали моментний відключення мережі. Я зробив збірку; він скаржився на те, що мої файли були змінені поза редактором (вони не були; файли блокуються просто зашкодженими), і він склався чудово, усуваючи помилку щодо InitializeComponent()методу.

BTW, якщо вам цікаво, розробити щось із мережевого накопичувача - це погана практика. Це стає особливо проблематичним, коли ви намагаєтесь використовувати керований код .NET; з мого досвіду, це вироджується щоразу, коли ви будуєте. Я забув помістити цей маленький проект, що викинувся, у відповідну папку, і я нарешті заплатив ціну.


2

Іншим можливим поясненням є те, що ви будуєте проти x86. Клацніть правою кнопкою миші рішення та виберіть Менеджер конфігурацій. Подивіться, чи ви будуєте проти x86 замість будь-якого процесора.


2

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

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

що є GUID проекту для WPF. Потім я видалив і знову додав UserControl, і він почав працювати. Я не впевнений, чи мав би я зробити цей останній крок, але це працює для мене зараз.


2

Через певну причину після копіювання .xaml та його .cs між проектами дія збирання іноді змінюється. Будь ласка, переконайтеся, що дія збірки вашого .xaml є Page.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.