[wpf] El nombre 'InitializeComponent' no existe en el contexto actual



14 Answers

La acción de compilación para el archivo .xaml también se debe establecer en "Página", cuando se mueve un archivo xaml entre proyectos, esta configuración se pierde (al menos en VS 2010).

Question

Si creo un nuevo proyecto en Visual Studio 2010 SP1 y selecciono "Aplicación WPF" y trato de compilar la aplicación generada, obtengo el error

El nombre 'InitializeComponent' no existe en el contexto actual.

Recibí un error similar esta mañana cuando traté de construir mi proyecto actual. Ayer, no tuve problemas para compilarlo y ejecutarlo.

Creé un nuevo proyecto y obtuve el error cada vez que compilé el proyecto. Acabo de enviar el proyecto a un colega, y él acaba de compilar sin ningún error.

¿Qué está mal?




Esto me sucedió porque un desinstalador del paquete Nuget sopló todos los atributos en el elemento <Application> en App.xaml. Esto incluyó el atributo x: Clase, que especifica el nombre de la clase de la aplicación. Entonces la clase parcial que contiene el método InitializeComponent () nunca se generó.

Solucioné el problema invirtiendo App.xaml en la copia controlada por fuente.




Esto lo resolvió para mí.

Comenté los recursos en el archivo 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>

Comentando esto vuelve a arreglar el error de compilación.

<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>

Profundizando un poco más, descubrí que el archivo app.g.cs en {Proyecto} \ obj \ debug contenía lo siguiente cuando dejé el recurso comentado.

/// <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
}



esto sucedió conmigo cuando accidentalmente eliminé la referencia de clase de la definición xaml:

He reemplazado el

<Window x:Class="myapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

primera línea con esto:

<RibbonWindow 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

Sé que esta no es la respuesta a la pregunta original (porque el proyecto se basa en otra máquina), pero el mensaje de error fue el mismo, así que tal vez ayude a alguien con esta situación.




Acabo de encontrarme con este problema, y ​​resultó que mi proyecto está almacenado en mi carpeta de usuario, que está almacenada en la red, y tuvimos un corte de red momentáneo. Hice una construcción; se quejaba de que mis archivos habían sido modificados fuera del editor (no lo habían hecho, los bloqueos de archivos acababan de funcionar) y funcionaban bien, eliminando el error con respecto al método InitializeComponent() .

Por cierto, en caso de que se lo pregunte, desarrollar algo desde un disco de red es una mala práctica. Se vuelve particularmente problemático cuando intentas aprovechar el código administrado de .NET; en mi experiencia, se asusta cada vez que construyes. Olvidé poner este pequeño proyecto desechable en la carpeta correcta y terminé pagando el precio.




Tuve el mismo problema, tuve que convertir mi proyecto compartido en una biblioteca de clases portátil.




Me encontré con esto al cambiar el nombre de un control de usuario. La forma en que lo arreglé fue para comentar InitializeComponent, verificar que todos los nombres fueran correctos (xaml y código detrás), compilar el proyecto, descomentar InitializeComponent y luego compilar de nuevo. Parece que puede haber un par de causas / soluciones para este problema, pero de esta manera lo hice por mí.




Si los espacios de nombres son correctos, también hay un mismo error,

Solo cierre su aplicación y ábrala nuevamente .

Esto puede resolver su problema




Descargue la solución completa y luego vuelva a cargarla. Luego reconstruye la solución. Esto resolvió el problema para mí.




Otra posible explicación es que estás compilando contra x86. Haga clic con el botón derecho en su Solución y elija Configuration Manager. Vea si está compilando contra x86 en lugar de cualquier CPU.




Tuve el mismo problema, pero en mi caso nada de esto me ayudó. En mi situación, todos los proyectos de WPF que tenía (incluidos los proyectos recién creados) dejaron de compilarse con este error. Eventualmente desinstalé todos los .Net frameworks y luego los reinstalé y las cosas comenzaron a funcionar nuevamente. También hice una reinstalación de Visual Studio, pero resultó que no tuvo ningún efecto.




He tenido esto (aunque fue muy culpa mía y lo dejé después de que copié y pegué un código); puede ocurrir cuando el espacio de nombres no coincide entre el XAML y el código detrás

P.EJ

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

y el código detrás es

namespace NotThePanelItShouldBe



Estoy de acuerdo con la respuesta anterior de que los espacios de nombres tienen que coincidir. Sin embargo, tuve un problema como este en el que los espacios de nombres coincidían.

Para solucionarlo, simplemente cambié el espacio de nombres en el XAML a uno INCORRECTO, lo guardé y luego lo cambié al CORRECTO. Voila!




Hay una razón muy específica para esto, y está en la configuración del proyecto. Esto generalmente sucede cada vez que intenta agregar un control / ventana WPF a una biblioteca o proyecto de clase .NET 2.0. El motivo de este error es que el proyecto no sabe si está creando un control o ventana de WPF y, por lo tanto, intenta construirlo como un proyecto de C # 2.0.

La solución implica editar el archivo .csproj. Haga clic derecho en el proyecto que causa el problema y seleccione "Descargar proyecto". Haga clic con el botón derecho en el proyecto descargado y seleccione "Editar .csproj". Se abrirá el archivo .csproj y podrá ver el XML. busca la siguiente línea:

<Import Project=…..

Está cerca del final del archivo, y la única línea que tienes es probablemente

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

Esto le dice a Visual Studio que cree el proyecto como un proyecto .NET 2.0. Lo que queremos hacer es decirle a Visual Studio que este es realmente un proyecto de WPF, por lo que debemos agregar la siguiente línea:

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Esta línea le indicará a Visual Studio que construya el proyecto como un proyecto de WPF. Ahora su fondo de archivo .csproj debería verse así:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />

Guarde el archivo .csproj, haga clic derecho en el Explorador de soluciones y seleccione la compilación "Recargar proyecto" y listo, ¡ya está todo listo!









Related