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


383

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

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

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

我创建了一个新项目,并且每次编译项目时都会收到错误消息。我刚刚将项目发送给了一位同事,他的编译没有任何错误。

怎么了?


3
这个用户“错误”看起来很容易解决,只是一个简单的x:Class正确定义。在一切正常之前,开发人员应该更加注意,但是如果不是这个错误而是带有相同错误消息的幻影错误,那该怎么办?我从2012年开始阅读了很多不同的voodoo解决方法。这将有助于从VS获得更清晰的错误消息,并提供有关错误消息的COURSE修正,该错误消息具有相同的消息。自2012年以来,开发人员开始更改文件,项目的构建配置,复制粘贴项目,从App文件夹删除文件,重新启动VS等。Bravo MS ... 4年的错误并且还在变老!
juagicre '16

2
对于任何对此问题的未来读者:这个问题似乎有很多可能的来源。就我而言,前几个答案无济于事,但下一个答案是正确的。
MOnsDaR '16

设计器文件的@MOnsDaR命名空间对我来说是个问题。
Ctrl S

虽然这可能是由很多原因引起的(命名空间重命名为\页面类型-MSBuild),但我最终找到了解决该问题的解决方案,以解决我继承的项目。在.csproj文件中,我必须将“ ToolsVersion”从4更改为15(VS 2017)。
MrMikeJJ

Answers:


736

我已经遇到过几次了,一直忘了是什么原因造成的。当我在文件后面的代码中重命名命名空间时遇到了这个问题,而在XAML中却没有。

因此,请检查您是否已完成相同的操作。

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

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

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

10
谢谢肖恩。我来这里是在这里发布这个答案,但是您已经击败了我。这正是发生的事情,它解决了我的问题。您的评论应该在图表的上方,因为它可以为我节省15分钟。
万能

2
如果类名不同,则会收到相同的错误
reggaeguitar 2014年

2
这就是答案。不知道为什么没有选择它,但是就是这样,我遇到了一些Xamarin.Forms编码的问题。
Marcus Shockley

1
重构时,请确保包括注释和字符串(Visual Studio 2015)
Gabriel GM

3
对于我(在Xamarain.Forms中)使用从Azure下载的“快速入门”项目,是xmlns:x =“ schemas.microsoft.com/winfx/2009/xaml ”和x:Class 之间的空格/缩进问题。我删除了它,然后重新输入它就可以了!
詹姆斯

241

.xaml文件的“生成操作”也必须设置为“页面”,在项目之间移动xaml文件时,此设置会丢失(至少在VS 2010中)。


11
这就是发生在我身上的事情。谢谢!
伊格纳西奥·索勒·加西亚

3
复制粘贴后,xaml生成操作会从页面更改为内容
Roberto

4
仍然发生在Visual Studio 2012(更新2)中
gumo

8
仍然发生在Visual Studio 2013中
Chris Ray

7
说真的...为什么是微软,为什么?你讨厌我吗?
qwertoyo 2014年

106

对于那些在“调试”模式下没有错误,但在“发布”模式下确实存在指定的错误(但项目运行正常)的人,可以尝试以下简单方法:

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

此方法在VS 2015中对我有用,并且根据其他用户,2017和2019年也是如此


3
你今天是我的英雄。谢谢
Peter pete

14
疯狂的是,这对我来说对VS2015有用。并且它修复了所有XAML文件中的所有错误。这是一个真正的WTF时刻。
William Denman

5
亲爱的,我又被这个人烧死了 幸运的是,我找到了我已经投票赞成并发表评论的相同答案。我真的应该,但是这是我的显示器上的便条纸。
威廉·丹曼

3
与VS2017相同,此问题已得到修复。
汉斯(Hans)

2
仍然可以在VS2019中使用...
soulflyman '19

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

在重构期间,我重命名了一些文件/文件夹,并且需要重新生成之前存在的* .g.cs文件,我在遇到此错误。


似乎我有同样的问题,但这对我不起作用。
LuckyLikey

在检查您的xaml x:Class与匹配后,执行此操作Namespace.Class
杰克

tnx。这个简单的把戏对我有用。
吉尔·阿迪诺

26

这有一个非常具体的原因,它在项目设置中。每当您尝试将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文件,在解决方案资源管理器中右键单击它,然后选择“ Reload Project”编译,就这样,一切就完成了!


1
在写这个问题之前,我曾尝试过此方法,但没有帮助。我认为我无法编译新项目但是我的同事可以...
有点奇怪

1
我也尝试过,但没有帮助。添加新的导入会导致出现新的警告(如下所示),但是原始错误仍然存​​在。“ C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.WinFX.targets”无法再次导入。它已经在“ C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.NETFramework.targets(76,3)”中导入。这很可能是构建创作错误。随后的导入将被忽略。“
user316117

我也试过了,但是没有用...?
Sizons 2015年

谢谢,这对我来说已解决了我继承的项目。
MrMikeJJ

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

第一行与此:

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

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


这不完全是我的问题,但它帮助我进行了本地化。之后我有了没有类名的名称空间
Rivenfall

这对我有用。谢谢
Sinaesthetic 2015年

这帮助我找到了问题,就我而言,我错过了x:Class行,为我修复了此问题
APC

18

从另一个项目导入类,或更改xaml文件的路径,或xaml或.cs文件后面的名称空间时,可能会出现此错误。

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

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

如您所见,导入文件中的名称空间以旧项目名称开头:“ TrainerB”,但是您的新项目可能具有不同的名称,因此只需在.xaml文件和后面的.cs文件。

二:

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

构建动作:嵌入式资源

自定义工具: MSBuild:UpdateDesignTimeXaml

XAML文件属性

Xaml命名空间更正01

Xaml命名空间更正02


我的天啊!非常感谢您的解决方案。我测试了那里找到的每个解决方案,但没有任何效果。诀窍在于xaml文件的属性。+1
IgniteCoders

16

确保在xaml文件中

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

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


这解决了我的问题。
octavian

16

检查设计器文件。

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

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


14

我有这个问题(尽管这是我的错,是我复制并粘贴一些代码后造成的);当XAML和背后的代码之间的命名空间不匹配时,可能会发生这种情况

例如

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

而后面的代码是

namespace NotDockPanel

这使我发现我的设计师的命名空间不正确。谢谢!
Ctrl S

13

我在重命名用户控件时遇到了这个问题。我解决问题的方法是注释掉InitializeComponent,确认所有名称正确(xaml和后面的代码),构建项目,取消注释InitializeComponent,然后再次构建。听起来可能有几个原因/解决方案可以解决此问题,但是这种方法对我来说确实可行。


1
我没有重命名吗?但是,此解决方案对我有用。obj文件夹中缺少* .g.cs和* .gics,将其注释掉并生成项目会生成丢失的文件。不知道它是如何进入这种状态的。
finlaybob

11

上面的答案对我都不起作用。除了重复的,我都尝试过。但是出于某些奇怪的原因,这在我的Visual Studio 2015跨平台项目中起作用:

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

这个为我工作。当InitializeComponent()开始失败时,我已复制并粘贴并重命名了一个用户控件。
拉斐尔·文图拉

您究竟是如何偶然发现此修复程序的?我尝试了其他所有方法,并且此方法有效。使用VS 2017,因此问题是当前的。
blearyeye

太好了,这对我有用。非常感谢您
-IZI

9

我同意上述答案,即名称空间必须匹配。但是,我遇到了一个这样的问题,即名称空间匹配。

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


我会将其添加为正确答案的注释,但是我没有代表这样做:(
heights1976

谢谢你!疯狂尝试各种事情后为我工作。我的解决方案最初的构建过程没有任何错误,然后在PC入睡一段时间后再次尝试并得到了错误。也许与睡眠模式有关?
JeremyB '16

我有相同的问题和解决方案。我相信这与IntelliSense有关。在xaml中更改名称空间可能会触发IntelliSense数据库中相关部分的更新。虽然这只是一个猜测。
FishySwede

8

如果您使用Xamarin Forms并移动XAML文件,则该文件的“生成操作”将更改。Xamarin Forms需要“构建操作=嵌入式资源”。

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

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


先生/女士,万岁!
naspinski

7

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


7

卸载整个解决方案,然后再次重新加载。然后重建解决方案。这为我解决了这个问题。


谢谢为我工作!
Izion

6

导致此错误的另一个常见原因是您是否在其中执行了以下操作:

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

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


5

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


它工作了两次;)
Flou

4

我知道这是由不同的原因引起的,但这是一个非常受欢迎的帖子,我在类库中遇到了同样的问题。在这种情况下,原来是两个在我的命名空间(在这篇文章中回答了改变这里),而编译器不能重新定义了InitializeComponent()方法的Window.gics。不能这样做是因为类库缺少csproj文件中WPF项目的ProjectTypeGuid值。有关此的说明在这里这里。我想如果别人碰到同样的问题我会分享。在这种情况下,仅更改名称空间是不够的。


3

这发生在我身上,是因为Nuget软件包卸载程序删除了App.xaml中<Application>元素上的所有属性。其中包括x:Class属性,用于指定应用程序类名称。因此,从未生成包含InitializeComponent()方法的局部类。

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


由于缺少x:Class属性,我遇到了相同的错误,但是与Nuget无关。它只是以某种方式消失了,可能是视觉工作室的魔法。
Ismail Degani

3

这为我解决了。

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

重新注释此错误以修复构建错误。

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

3

对于那些在互联网上找到它的人。检查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>

在我的csproj中,<DependentUpon>YourFile.xaml</DependentUpon>由于某种原因我错过了,而这正是我修复的原因!
艾萨克·贝克

3

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

只需关闭您的应用程序,然后再次打开

这可以解决您的问题


打开和关闭Visual Studio是什么意思?
LuckyLikey

有时,XDesProc.exe(Microsoft Visual Studio XAML UI设计器)将停止Visual Studio正常运行,并且将无法正确加载xaml文件。因此,重新启动Visual Studio解决了我的问题。(您也可以在“任务管理器”中转到“进程”,并仅停止该进程而无需重新启动Visual Studio)。
Syed Siraj Wajeed

我在VS2017中发现了这一点。我已经更改了所有其他内容,并且命名空间在任何地方都是正确的,但是InitializeComponent()调用有错误,并且xaml.cs文件中的partial关键字有警告,类似“ partial class只有一个文件”。我碰巧关闭并重新打开该解决方案,发现这两个问题都解决了。
史蒂夫·克兰

3

进行一些操作后,.cs文件的名称空间和.xaml文件中的名称空间可能会有所不同(在xaml中查找x:Class =“ namespace.yourType”)。

修复它们是相同的。


3

我发现“启动对象”是(未设置)对我造成此错误的原因。

“启动对象”(未设置)


问题中提到的所有其他细节都一样吗?
marklark

2
考虑到关于异常如何表现的问题尚不清楚,确切的细节并不确切。但是潜在的症状是相同的,因此我的回答没有任何问题。我的意图是增加对话,因为在我的情况下没有答案/评论有用。我只是在尝试增加知识库中经常出现的非描述性编译错误。
摇滚

1
谢谢!它解决了我的问题!这似乎给定的选项(Startup对象)是当我从移动MainWindow.xaml自动复位rootView目录中。
AlexMelw

3

由于这似乎是解决有关缺少“ InitializeComponent”的问题的最佳选择,因此我将在此处提供答案。

我也遇到了这个问题,我已经尝试了在这里以及Google可以找到的所有其他论坛中找到的所有内容,但是没有一个为我解决了这个问题。经过两个小时的尝试,我终于明白了我的问题所在设置有。

在我们的项目中,我们使用MahApps的 Metro组件。给我带来麻烦的视图是从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在所有其他视图中在中的方式,因此我认为这是可行的。

但是,情况并非如此Controls:MetroWindow!在那里,我绝对需要如下资源定义:

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

因此,总的来说,我的问题是缺少<ResourceDictionary>标签。我真的不知道为什么会产生“ InitializeComponent”错误,而且奇怪的是没有在我的每台机器上都产生它,但这就是我解决的方法。希望这会有所帮助(其余0.001%的人遇到此问题)。


2

我刚刚遇到了这个问题,原来是我的项目存储在用户文件夹中,该文件夹存储在网络上,并且我们暂时中断了网络。我做了一个建筑;它抱怨说我的文件已在编辑器外部修改(它们没有;文件锁刚刚坏了),并且它构建良好,消除了有关InitializeComponent()方法。

顺便说一句,如果您想知道,从网络驱动器开发某些东西是不好的做法。当您尝试利用.NET的托管代码时,这尤其成问题。根据我的经验,每次构建时都会吓到。我忘了把这个扔掉的小项目放在适当的文件夹中,而最终付出了代价。


2

另一个可能的解释是您正在针对x86进行构建。右键单击您的解决方案,然后选择配置管理器。查看您是否针对x86而不是针对任何CPU进行构建。


2

因此,我意识到这是一个较旧的问题,但是我们遇到了类似的问题。我们能够使用VS2012构建项目,但无法从命令行使用msbuild。我进入.proj文件,发现它在默认“ PropertyGroup”部分下没有“ ProjectTypeGuids”的记录,因此我添加了以下内容:

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

这是WPF的项目GUID。然后,我删除并重新添加了UserControl,它开始工作。我不确定是否必须做最后一步,但是现在对我有用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.