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




ошибка xamarin (25)

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

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

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

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

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


Answers

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

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

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


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

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

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



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

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


Поскольку это, похоже, относится к теме о недостатке «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 s во всех моих других представлениях, так что я предполагаю, что это сработает.

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

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

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


После некоторого действия пространство имен файла .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, и он начал работать. Я не уверен, должен ли я сделать этот последний шаг, но теперь он работает для меня.


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


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


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

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


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


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

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

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

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


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

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

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


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


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

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

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

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

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

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

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


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

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

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


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

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

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


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

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

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

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

Два:

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

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

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


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

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


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

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

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


У меня была эта проблема в VS2013 (обновление 5), и для этого могут быть две причины, которые вы можете найти, включив «Подробный» вывод сборки в разделе «Инструменты» -> «Проекты и решения» -> «Сборка и запуск», ,

  1. "Forcing recompile of all source files due to missing PDB "..."
    Это происходит, когда вы отключите вывод информации отладки в своих параметрах компилятора (в разделе «Параметры проекта:« C / C ++ »->« Формат отладочной информации »-« Нет »и« Линкер »->« Генерировать информацию отладки »до« Нет »:) , Если вы оставили «C / C ++» -> «Имя файла базы данных программы» по умолчанию (это «$ (IntDir) vc $ (PlatformToolsetVersion) .pdb»), VS не найдет файл из-за ошибки ( https://connect.microsoft.com/VisualStudio/feedback/details/833494/project-with-debug-information-disabled-always-rebuilds ).
    Чтобы исправить это, просто очистите имя файла до «» (пустое поле).

  2. "Forcing rebuild of all source files due to a change in the command line since the last build."
    Это похоже на известную ошибку VS ( https://connect.microsoft.com/VisualStudio/feedback/details/833943/forcing-rebuild-of-all-source-files-due-to-a-change-in-the-command-line-since-the-last-build from https://connect.microsoft.com/VisualStudio/feedback/details/833943/forcing-rebuild-of-all-source-files-due-to-a-change-in-the-command-line-since-the-last-build ) и, похоже, исправлена ​​в более новых версиях (но не VS2013). Я не знал об обходном пути, но если вы это сделаете, обязательно отправьте его здесь.





wpf visual-studio-2010 visual-studio initializecomponent