wpf - ошибка - Имя «InitializeComponent» не существует в текущем контексте




ошибка cs0103 имя initializecomponent не существует в текущем контексте (20)

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

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

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

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

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

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

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


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

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

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

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

Два:

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

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

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


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


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

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

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


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


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

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

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


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

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

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


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


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

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

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


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

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


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

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

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


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

НАПРИМЕР

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

и код позади

namespace NotDockPanel

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

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

совпадают с именем «Project1» и именем «Page1»


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

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


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

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

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


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

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


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

Поэтому проверьте, сделали ли вы это.

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

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

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

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







initializecomponent