it-swarm.com.ru

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

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

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

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

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

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

339
user876402

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

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

Имена namespace и class должны совпадать, поскольку они оба являются частью частичного класса

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

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

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

214
Segfault

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

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

Этот метод работал для меня.

71
BCA

Для этого есть очень специфическая причина, и это в настройках проекта. Обычно это происходит всякий раз, когда вы пытаетесь добавить элемент управления/окно 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, щелкните его правой кнопкой мыши в обозревателе решений и выберите команду "Обновить проект", и все, готово!

24
Shailender Singh

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

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

22
p3d3str1an
  1. Перейдите в каталог решений
  2. Удалить папку\obj
  3. Восстановить решение

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

21
JordanBean

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

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

сопоставьте имя "Project1" и имя "Page1"

16
Song

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

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

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

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

Два:

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

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

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

Xaml file properties

Xaml Namespace Correcting 01

Xaml Namespace Correcting 02

15
Reader Man San

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

13
Morgan Herlocker

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

НАПРИМЕР

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

и код позади

namespace NotDockPanel
13
Dave

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

  1. Щелкните правой кнопкой мыши проект, который вызывает проблему в обозревателе решений. Во всплывающем меню выберите: Добавить -> Класс
  2. Выберите кросс-платформенный -> Forms Xaml Page. Оставьте красивое стандартное имя Page1.cs и нажмите "Добавить".
  3. Обратите внимание, что предыдущая проблема InitializeComponent () просто исчезла по какой-то причине.
  4. Удалите только что созданный Page1.cs и продолжайте программировать так, как будто Visual Studio работает нормально.
9
Anders

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

Чтобы исправить, я просто изменил пространство имен в XAML на НЕПРАВИЛЬНОЕ, сохранил, а затем вернул обратно в ПРАВИЛЬНОЕ. Вуаля!

8
heights1976

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

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

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

8
Ctrl S

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

7
Eldhose

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

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

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

7
Tonatio

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

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

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

6
user1834059

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

6
Diego Venâncio

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

4
Mark McCorkle

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

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

3
Mauro Sampietro

Для тех, кто находит это в интернете. Проверьте файл 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>
3
acsadam0404

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

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

Я обнаружил, что "Объект запуска" был (не установлен), вызывая эту ошибку для меня.

"Объект запуска" (не задан)

3
Rock

Поскольку это, похоже, тема для решения проблемы отсутствия "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>

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

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

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

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

3
Tom Ladek

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

3
bjhuffine

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

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

3
Richard Beier

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

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

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

3
Syed Siraj Wajeed

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

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

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

2
Jon Nos

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

2
Marek Malczewski

В моем случае в моем проекте была ссылка, которая была неправильной, но об этом не сообщалось.

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

2
LuckyLikey

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

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

2
J.D. Ray

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

2
Peter

Лучший выстрел в MCVE в этой теме - с VS2017 15.5.2 загрузить XAML из LabelControlAdvancedSample , последний пример в эта страница учебника ,.

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    Title="LabelControlAdvancedSample" Height="180" Width="250">
<StackPanel Margin="10">
    <Label Target="{Binding ElementName=txtName}">
        <StackPanel Orientation="Horizontal">
            <Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
            <AccessText Text="_Name:" />
        </StackPanel>
    </Label>
    <TextBox Name="txtName" />
    <Label Target="{Binding ElementName=txtMail}">
        <StackPanel Orientation="Horizontal">
            <Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
            <AccessText Text="_Mail:" />
        </StackPanel>
    </Label>
    <TextBox Name="txtMail" />
</StackPanel>

Оставив App.xaml & App.xaml.cs по умолчанию, попытка скомпилировать выше приводит к ошибке компоновщика.
К счастью, при наведении указателя мыши на оператор InitializeComponent () в LabelControlAdvancedSample.xaml.cs появляется подсказка по связанному тексту:

Показать возможные исправления.

Нажатие на него вызывает другой связанный текст:

Создать метод MainWindow.InitializeComponent.

Выполнение этого приводит к следующему методу "ничего не делать":

    private void InitializeComponent()
    {
        throw new NotImplementedException();
    }

Функция должна быть определена для проекта. Похоже, что-то отличается в реализации InitializeComponent в WPF для VB.Net .
Редактировать : класс namespace.class в первой строке xaml неверен. Согласно MSDN и @Sean B's ответ , это должно быть

<Window x:Class="LabelControlAdvancedSample.MainWindow"

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

2
Laurie Stearn

Эта проблема возникла у меня при создании "Проекта приложения WPF" и изменении цели сборки на "Библиотеку классов" для использования в качестве внешнего инструмента другой программой.

Я изменил все мои файлы .xaml для своих окон, чтобы их действие по сборке было установлено на "Страница". Чего я не осознавал, так это того, что проект также содержал "App.xaml" и "App.xaml.cs".

"App.xaml" также должен быть установлен в "Page" или полностью удален (вместе с "App.xaml.cs"). Я сделал первое, потом второе, так как понял, что файлы бесполезны.

2
Benoit Dufresne

У меня была такая же проблема в VS2017, проект Xamarin.Forms. Читая эту ссылку ошибки:

https://bugzilla.xamarin.com/show_bug.cgi?id=33181#c5

Чтобы решить проблему в этом случае: щелкните правой кнопкой мыши [xaml-file-name].xaml, выберите Properties, затем измените Build Action на Content, затем вернитесь к Embedded resource.

1
Amir Rezazadeh

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

1
Gregor Ažbe

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

1
Luk

У меня была та же самая проблема, ожидаю, что я скопировал свои MainWindow xaml и cs в новый файл, а затем скопировал их обратно в исходное место. Затем я получил эту ошибку после попытки скомпилировать приложение WPF.

Чтобы исправить эту ошибку, я переименовал пространство имен (например, из egNamespace -> egNamespaceNew, и оно снова заработало. Затем я изменил пространство имен обратно на исходное.

1
user3113237

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

0
Jeff

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

0
Kyle

да, так много всего может быть ... Я бы добавил это ... убедитесь, что App.xaml указывает на ваше пространство имен (где находится файл вашего приложения) + .App, например. x: Class = "DX.App" <=== убедитесь, что это приложение, а не имя главной страницы

Надеюсь, это работает и для вас.

0
ramnz