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

use*_*402 358 wpf initializecomponent visual-studio-2010 visual-studio

如果我在Visual Studio 2010 SP1中创建一个新项目并选择"WPF应用程序"并尝试生成生成的应用程序,我会收到错误

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

今天早上,当我尝试构建当前项目时,我遇到了类似的错误.昨天,编译和运行它没有问题.

我创建了一个新项目,每当我编译项目时都会收到错误.我刚刚将项目发送给了一位同事,他刚编译时没有任何错误.

怎么了?

Sea*_*n B 698

我已经遇到过这种情况并且忘记了导致它的原因.当我在我的代码隐藏文件后重命名命名空间而不是在我的XAML中时,我遇到了这个问题.

所以检查一下你是否也这样做过.

命名空间名需要匹配,因为它们是一个局部类的两个组成部分

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

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
Run Code Online (Sandbox Code Playgroud)

  • 谢谢肖恩.我来这里发布这个答案,但你已经打败了我.这正是发生的事情,它解决了我的问题.你的评论应该高于图表,因为它可以节省我15分钟. (9认同)
  • 重构时,请确保包含注释和字符串 (Visual Studio 2015) (3认同)
  • 对于我(在Xamarain.Forms中)使用从Azure下载的"快速启动"项目,它是xmlns:x ="http://schemas.microsoft.com/winfx/2009/xaml"和x之间的空格/缩进:这是问题的类.我删除了这个并重新输入它并且它有效! (3认同)
  • 如果类名不相同,您将得到相同的错误 (2认同)
  • 这就是答案.不知道为什么没有被选中,但就是这样,我遇到了一些Xamarin.Forms的编码. (2认同)

Seg*_*ult 227

.xaml文件的Build Action也必须设置为"Page",当在项目之间移动xaml文件时,此设置会丢失(至少在VS 2010中).

  • 这就是发生在我身上的事情.谢谢! (11认同)
  • 仍然在Visual Studio 2013中发生 (8认同)
  • 说真的......为什么微软,为什么?你讨厌我/我们吗? (7认同)
  • 对于我的案例,“构建操作”设置为“页面”,但将其切换为“无”并返回“页面”有效! (6认同)
  • 仍然在Visual Studio 2012中发生(更新2) (4认同)
  • 复制粘贴后,xaml构建操作会从页面更改为内容 (3认同)
  • 只需将构建操作从“页面”更改为任何内容...然后返回“页面”就为我解决了这个问题! (3认同)
  • 在 VS 2019 的一项更新后遇到了同样的问题!构建操作*被*设置为Page。通过将构建操作更改为其他值并再次返回页面来解决此问题。 (2认同)
  • 如果您在外部库中定义了自定义控件(xaml + cs),则在WPF .NET CORE 3.0中的Visual Studio 2019 v16.3中仍然会发生这种情况。 (2认同)

BCA*_*BCA 87

对于那些(在VS2015中)在调试模式下没有错误,但在发布模式下确实有指定错误(但项目运行正常)的人,这里有一些简单的尝试:

  1. 打开与违规的xaml.cs文件对应的XAML文件.
  2. 进行编辑 - 任何编辑,比如在某处添加空格
  3. 保存文件并关闭它

这种方法对我有用.

  • 疯狂,这对VS2015来说很有用.它修复了所有XAML文件中的所有错误.这是一个真正的WTF时刻. (12认同)
  • Dang,我刚被这个人烧了.幸运的是,我找到了同样的答案,我已经投票并评论过了.我真的应该,但这是我的显示器上的便利贴. (4认同)
  • 圣冰箱!!这确实有效。我有VS2019,也遇到过这个。微软是认真的吗??为什么 Jetbrains Rider 没有这些问题?超级不专业。 (4认同)
  • 你今天是我的英雄.谢谢 (3认同)
  • 与VS2017相同,此问题已得到修复。 (3认同)
  • 也适用于 VS 2022 + .NET 6。在我的例子中,错误仅在调试模式下显示。这个方法有帮助。谢谢。 (2认同)

Sha*_*ngh 25

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

解决方案涉及编辑.csproj文件.右键单击导致问题的项目,然后选择"卸载项目".右键单击卸载的项目,然后选择"编辑.csproj"..csproj文件将打开,您可以看到XML.寻找以下一行:

<Import Project=…..
Run Code Online (Sandbox Code Playgroud)

它接近文件的末尾,并且你可能拥有的唯一一行

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Run Code Online (Sandbox Code Playgroud)

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

<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
Run Code Online (Sandbox Code Playgroud)

该行将告诉Visual Studio将项目构建为WPF项目.现在你的.csproj文件底部应如下所示:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
Run Code Online (Sandbox Code Playgroud)

保存.csproj文件,在解决方案资源管理器中右键单击它并选择"重新加载项目"编译就可以了,你就完成了!

  • 我在写这个问题之前尝试过这个,但没有帮助。我觉得有点奇怪,我无法编译新项目,但我的同事可以...... (2认同)

Jor*_*ean 24

  1. 导航到解决方案目录
  2. 删除\ obj文件夹
  3. 重建解决方案

我在重构期间遇到了这个错误,我重命名了一些文件/文件夹,并且需要重新生成prexisiting*.g.cs文件.

  • 检查 xaml `x:Class` 与 `Namespace.Class` 匹配后执行此操作。 (10认同)

小智 22

当我偶然从xaml定义中删除类引用时,这发生在我身上:

我已经取代了

<Window x:Class="myapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Run Code Online (Sandbox Code Playgroud)

第一行:

<RibbonWindow 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Run Code Online (Sandbox Code Playgroud)

我知道这不是原始问题的答案(因为那个项目建立在另一台机器上),但错误信息是相同的,所以也许我会帮助这种情况的人.


小智 16

确保在xaml文件中

<Page x:Class="Project1.Page1" ...
Run Code Online (Sandbox Code Playgroud)

匹配'Project1'名称和'Page1'名称


小智 16

从其他项目导入类,或更改xaml文件的路径或xaml或后面.cs文件的命名空间时,可能会收到此错误.

一:它的命名空间可能与您在新项目中的命名空间不同

namespace TrainerB.MVC.Forms
{
     public partial class AboutDeveloper : ContentPage
     {
          public AboutDeveloper()
          {
               InitializeComponent();
          }
     }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,导入文件中的名称空间以旧项目名称开头:"TrainerB",但您的新项目可能有不同的名称,因此只需在.xaml文件中将其更改为正确的新项目名称即可.背后的.cs文件.

二:

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

构建操作:嵌入式资源

自定义工具: MSBuild:UpdateDesignTimeXaml

Xaml文件属性

Xaml命名空间纠正01

Xaml命名空间纠正02


Dav*_*ave 14

我有这个(虽然这是我的错,并且是在我复制并粘贴了一些代码后引起的); 当命名空间在XAML和后面的代码之间不匹配时,可能会发生这种情况

例如

<UserControl x:Class="DockPanel.TreeView" />
Run Code Online (Sandbox Code Playgroud)

而背后的代码是

namespace NotDockPanel
Run Code Online (Sandbox Code Playgroud)


Mor*_*ker 13

我在重命名usercontrol时遇到了这个问题.我修复它的方法是注释掉InitializeComponent,验证所有名称是否正确(xaml和代码隐藏),构建项目,取消注释InitializeComponent,然后再次构建.听起来这个问题可能有几个原因/解决方案,但这种方式对我来说.


Ctr*_*l S 12

检查设计器文件。

我有同样的问题。在我的情况,原因是,namespace对于FileName.Designer.cs不匹配(正确)namespace中使用FileName.cs

改变namespaceFileName.Designer.cs相匹配的FileName.cs立即解决了这个问题。


小智 11

上述答案都不适合我.我尝试了所有这些,除了重复的.但是出于一些奇怪的原因,这在我在Visual Studio 2015中的跨平台项目中起作用:

  1. 在解决方案资源管理器中右键单击导致问题的项目.在弹出菜单中选择:添加 - >类
  2. 选择跨平台 - > Forms Xaml Page.保留漂亮的Page1.cs标准名称,然后单击"添加".
  3. 注意以前的InitializeComponent() - 问题是如何由于某种原因消失的.
  4. 删除新创建的Page1.cs并继续编程,就好像Visual Studio工作正常一样.

  • 你到底是怎么偶然发现这个修复的?我尝试了其他所有方法,并且这个有效。使用 VS 2017,所以问题是当前的。 (3认同)

hei*_*976 8

我同意上面的答案,命名空间必须匹配.但是,我有一个像名称空间匹配的问题.

为了解决这个问题,我只是简单地将XAML中的命名空间更改为INCORRECT,保存,然后将其更改回CORRECT.瞧!


小智 7

如果命名空间正确,那么也会出现相同的错误,

只需关闭您的应用程序并再次打开它即可

这可能会解决你的问题


Eld*_*ose 7

卸载整个解决方案,然后重新加载.然后重建解决方案.这解决了我的问题.


Ton*_*tio 7

如果您正在使用Xamarin Forms并移动XAML文件,则会更改文件的"构建操作".Xamarin Forms需要"构建动作=嵌入式资源".

在Visual Studio中应用"构建操作":

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


小智 7

帮助我的是将 .csproj 中的第一行更改为

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
Run Code Online (Sandbox Code Playgroud)


use*_*059 6

此错误的另一个常见原因是,如果您执行了以下操作:

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

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


Die*_*cio 6

我尝试上面的所有建议.如果你尝试没有成功,那就更容易了.创建一个新的page.xaml然后复制新类的代码并删除有问题的类XAML.不要花更多的时间.


Mar*_*kle 5

解决此问题的另一种方法是,只需将XAML上的property-> Build Action(嵌入式操作)从Embedded Resource(嵌入式资源)更改为其他任何内容,保存,然后再将其更改回Embedded Resource(嵌入式资源)。错误消失了。