名称“InitializeComponent”在当前上下文中不存在

如果我在Visual Studio 2010 SP1中创build一个新项目并select“WPF Application”并尝试构build生成的应用程序,则会出现错误

名称InitializeComponent在当前上下文中不存在。

今天上午,当我试图build立我目前的项目时,我收到了类似的错误。 昨天,我编译和运行没有问题。

我创build了一个新的项目,并且每当我编译这个项目的时候都会出错。 我刚刚把这个项目发给了一个同事,他刚刚编译没有任何错误。

哪里不对?

我遇到过这样的情况,并且忘记了是什么原因造成的。 我遇到了这个,当我重命名我的代码后面的文件名字空间,但没有在我的XAML。

所以检查你是否也做了同样的事情。

名称空间名称需要匹配,因为它们都是部分类的一部分

 namespace ZZZ { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow { //... } } <!-- XAML --> <Window x:Class="ZZZ.MainWindow"> 

.xaml文件的Build Action也必须设置为“Page”,当在项目之间移动一个xaml文件时,这个设置会丢失(至less在VS 2010中)。

对于那些(在VS2015中)在Debug模式下没有错误,但是在Release模式下有指定的错误(但是项目运行良好)的人来说,这里有一些简单的尝试:

  1. 打开对应于有问题的xaml.cs文件的XAML文件。
  2. 进行编辑 – 任何编辑,如在某处添加空间
  3. 保存该文件并closures它

这种方法为我工作。

当我意外地从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立在另一台机器上),但错误信息是一样的,所以也许我会帮助有这种情况的人。

  1. 导航到解决scheme目录
  2. 删除\ obj文件夹
  3. 重build解决scheme

我在重构过程中遇到了这个错误,我重命名了一些文件/文件夹,需要重新生成prexisiting * .g.cs文件。

有一个非常具体的原因,这是在项目设置。 当您尝试将WPF控件/窗口添加到.NET 2.0类库或项目时,通常会发生这种情况。 这个错误的原因是该项目不知道它正在构build一个WPF控件或窗口,因此试图将其构build为一个C#2.0项目。

解决scheme涉及编辑.csproj文件。 右键单击导致问题的项目,然后select“卸载项目”。 右键单击卸载的项目,然后select“编辑.csproj”。 .csproj文件将打开,您可以看到XML。 寻找以下行:

 <Import Project=….. 

它接近文件的结尾,并且唯一的行可能是

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

这告诉Visual Studio将该项目构build为.NET 2.0项目。 我们想要做的是告诉Visual Studio,这实际上是一个WPF项目,所以我们必须添加以下行:

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

该行将告诉Visual Studio将该项目构build为WPF项目。 现在你的.csproj文件底部应该是这样的:

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

保存.csproj文件,右键单击它在解决scheme资源pipe理器,并select“重新加载项目”编译,就是这样,你都完成了!

确保在xaml文件中

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

匹配“Project1”名称和“Page1”名称

我在重命名一个usercontrol时遇到了这个问题。 我解决这个问题的方法是将InitializeComponent注释掉,确认所有的名字是正确的(xaml和后面的代码),构build项目,取消注释InitializeComponent,然后重新构build。 这听起来似乎可能有一些原因/解决这个问题,但这种方式对我来说。

从其他项目导入类时,可能会出现此错误,或者更改xaml文件的path或xaml或.cs文件的命名空间。

一:它可能有一个名称空间,是不一样的,你在你的新项目

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

正如你所看到的,导入文件中的名字空间从旧的项目名称开始: “TrainerB” ,但是你的新项目可能有一个不同的名字,所以把它改成正确的新项目名称,在.xaml文件和后面的.cs文件。

二:

将.xaml文件的属性更改为:

构build行动:embedded式资源

自定义工具: MSBuild:UpdateDesignTimeXaml

Xaml文件属性

Xaml命名空间更正01

Xaml命名空间更正02

我已经有了这个(虽然这是我的错,在我复制并粘贴了一些代码后仍然留下)。 当名称空间不匹配XAML和后面的代码时,可能会发生这种情况

例如

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

和后面的代码是

 namespace NotThePanelItShouldBe 

这个错误的另一个常见原因是如果你在这里做了一些事情:

  1. 右键单击项目中的文件夹以创build新的UserControl。 这将创build一个类和xaml文件,该文件可以从文件夹的命名空间中的用户控件派生而来。

  2. 然后你决定改变这个类的命名空间,因为你真的只是使用文件夹来组织代码。 x:Class属性不会自动更新,因此它将search不存在的类。 可能可能会使用更好的错误消息,如“x:类名不能在名称bla.blaa.blaaa中find”。

我同意上面的答案,命名空间必须匹配。 不过,我有这样的问题,在命名空间匹配。

为了解决这个问题,我只是把XAML中的名字空间改成了一个错误的名字,保存起来,然后把它改回到正确的名字空间。 瞧!

上面的答案都没有为我工作。 除了重复的东西我都试过了。 然而,对于一些奇怪的原因,这在我在Visual Studio 2015中的跨平台项目中工作:

  1. 用鼠标右键单击解决scheme资源pipe理器中导致问题的项目。 在popup菜单中select:添加 – >类
  2. select跨平台 – >表单Xaml页面。 保持漂亮的Page1.cs标准名称,然后单击添加。
  3. 注意前面的InitializeComponent()问题是如何由于某种原因而消失的。
  4. 删除新创build的Page1.cs并继续编程,就像Visual Studio工作的很好。

这为我解决了。

我已经注释掉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> 

评论回到修复构build错误。

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

深入挖掘我发现{Project} \ obj \ debug中的app.g.cs文件仅在我留下资源时才包含以下内容。

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

我尝试以上所有build议。 如果你尝试得不到成功,那么得到更简单的方法。 创build一个新的page.xaml然后复制你的代码的新类,并删除问题的类XAML。 不要花更多的时间。

如果您使用Xamarin Forms并移动XAML文件,则文件的“构build操作”将被更改。 Xamarin Forms需要“build action = Embedded Resource”。

在Visual Studio中应用“构build操作”:

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

这发生在我身上,因为Nuget包卸载程序吹走了App.xaml中<Application>元素的所有属性。 这包括指定应用程序类名称的x:Class属性。 所以包含InitializeComponent()方法的部分类永远不会生成。

我通过将App.xaml恢复到源代码控制的副本来解决了这个问题。

解决这个问题的另一个方法是简单地将XAML上的Property – > Build Action从Embedded Resource更改为其他任何内容,然后将其更改回Embedded Resource。 错误消失。

卸载整个解决scheme,然后重新加载。 然后重build解决scheme。 这为我解决了这个问题。

如果命名空间是正确的,那么也有一个相同的错误,

只需closures你的应用程序,然后再打开它

这可能会解决你的问题

.cs文件的命名空间和.xaml文件中的命名空间可能不同(在xaml中查找x:Class =“namespace.yourType”)。

修复它们是相同的。

我发现“启动对象”是(未设置)导致我的这个错误。

“启动对象”(未设置)

很多东西都可以…我会添加这个…确保App.xaml指向您的命名空间(您的应用程序文件的位置)+ .App例如。 x:Class =“DX.App”<===确保这是应用程序,而不是主页名称

希望这也适用于你。

我有同样的问题,但在我的情况下,这没有帮助。 在我的情况下,我所有的WPF项目(包括新build项目)都停止编译这个错误。 最后,我卸载了所有.Net框架,然后重新安装它们,事情又开始工作。 我也做了一个Visual Studio的重新安装,但事实certificate,没有任何影响。

我有同样的问题,期望我把我的MainWindow xaml和cs到一个新的文件,然后将它们复制回原来的位置。 然后我试图编译WPF应用程序后得到这个错误。

我修复这个错误的方法是重命名命名空间(从egNamespace – > egNamespaceNew,然后再次运行),然后将命名空间更改回原来的名称空间。

我有同样的问题,我不得不把我的共享项目转换成一个可移植的类库。

右键单击项目中的文件夹来创build新的UserControl,这对我来说是个问题。 我在文件夹外创build了相同的控件,就是这样。

我刚刚遇到了这个问题,结果certificate我的项目存储在我的用户文件夹中,这个文件夹存储在networking上,我们有一个短暂的networking中断。 我做了一个构build; 它抱怨说我的文件已经在编辑器之外被修改了(他们没有;文件锁只是被绑定了),并且它构build的很好,消除了有关InitializeComponent()方法的错误。

顺便说一句,如果你想知道,从networking驱动器开发的东西是不好的做法。 当您试图利用.NET的托pipe代码时,这变得特别有问题; 根据我的经验,每当你build立时,它都会吓倒。 我忘了将这个小丢弃项目放在适当的文件夹中,最后付出了代价。

对于那些在互联网上发现这一点。 如果编译在那里,请检查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> 

另一个可能的解释是,你正在构build对x86。 右键单击您的解决scheme并selectconfigurationpipe理器。 看看你是否针对x86而不是Any CPU。

Interesting Posts