当前上下文中不存在名称“InitializeComponent”
Posted
技术标签:
【中文标题】当前上下文中不存在名称“InitializeComponent”【英文标题】:The name 'InitializeComponent' does not exist in the current context 【发布时间】:2011-10-19 00:41:26 【问题描述】:如果我在 Visual Studio 2010 SP1 中创建一个新项目并选择“WPF 应用程序”并尝试构建生成的应用程序,则会出现错误
。
今天早上我在尝试构建当前项目时遇到了类似的错误。昨天编译运行没问题。
我创建了一个新项目,但每次编译该项目时都会出现错误。我刚刚把项目发给同事,他刚刚编译,没有任何错误。
怎么了?
【问题讨论】:
这个用户“错误”看起来很容易解决,只是一个简单的 x:Class 正确定义。在一切正常之前,开发人员应该多加注意,但如果不是这个错误而是具有相同错误消息的幽灵错误怎么办?从 2012 年开始,我阅读了很多不同的巫毒教解决方法。这将有助于 VS 提供非常清晰的错误消息,当然也可以修复具有相同消息的幽灵错误。自 2012 年以来,开发人员一直在更改文件、项目、复制粘贴项目、从 App 文件夹中删除文件、重新启动 VS 等的构建配置。Bravo MS ......一个 4 年的错误,而且还在变老! 对于这个问题的任何未来读者:这个问题似乎有很多可能的来源。就我而言,前几个答案没有帮助,但后面的一个答案是正确的。 @MOnsDaR 设计器文件的命名空间对我来说是个问题。 虽然这可能是由许多原因引起的(命名空间重命名\页面类型 - MSBuild),但我最终找到了解决我继承的项目的原因的解决方案。在 .csproj 文件中,我必须将“ToolsVersion”从 4 更改为 15(VS 2017)。 【参考方案1】:我遇到过几次,一直忘记是什么原因造成的。 当我在我的代码隐藏文件中重命名命名空间时遇到了这个问题,但不是在我的 XAML 中。
所以请检查您是否也这样做了。
namespace 和 class 名称需要匹配,因为它们都是部分类的一部分
namespace ZZZ
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
//...
<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
【讨论】:
谢谢肖恩。我来这里是为了在这里发布这个答案,但你已经打败了我。这正是发生的事情,它解决了我的问题。你的评论应该在排行榜的前面,因为它可以为我节省 15 分钟。 如果类名不同,你会得到同样的错误 这就是答案。不知道为什么没有选择它,但就是这样,我遇到了一些 Xamarin.Forms 的编码。 重构时,确保包含 cmets 和字符串 (Visual Studio 2015) 对我(在 Xamarain.Forms 中)使用从 Azure 下载的“快速启动”项目而言,xmlns:x="schemas.microsoft.com/winfx/2009/xaml" 和 x:Class 之间的空白/缩进是问题。我删除了这个并重新输入了它,它起作用了!【参考方案2】:.xaml 文件的构建操作也必须设置为“页面”,在项目之间移动 xaml 文件时,此设置会丢失(至少在 VS 2010 中)。
【讨论】:
这就是发生在我身上的事情。谢谢! 在 Visual Studio 2012(更新 2)中仍然发生 在 Visual Studio 2013 中仍然会发生 说真的……为什么是微软,为什么?你恨我/我们吗? 如果您在外部库中定义了自定义控件 (xaml + cs),这仍然会在 WPF .NET CORE 3.0 中的 Visual Studio 2019 v16.3 中发生。【参考方案3】:对于那些在调试模式下没有错误,但确实在发布模式下出现指定错误(但项目运行良好)的人,这里有一些简单的尝试:
-
打开与有问题的 xaml.cs 文件对应的 XAML 文件。
进行编辑 - 任何编辑,例如在某处添加空格
保存文件并关闭它
这种方法在 VS 2015 中对我有用,根据其他用户的说法,在 2017 年和 2019 年也是如此
【讨论】:
今天你是我的英雄。谢谢 太疯狂了,这对我来说适用于 VS2015。它修复了所有 XAML 文件中的所有错误。这是一个真正的 WTF 时刻。 该死,我又被这个烫伤了。幸运的是,我找到了我已经投票和评论过的相同答案。我真的应该,但这是在我的显示器上的便利贴。 在 VS2017 中相同,这修复了它。 天哪!!这实际上有效。我有VS2019并遇到了这个。认真的微软??为什么 Jetbrains Rider 没有这些问题?超级不专业。【参考方案4】:-
导航到解决方案目录
删除 \obj 文件夹
重建解决方案
我在重构过程中遇到了这个错误,我重命名了一些文件/文件夹,并且需要重新生成预先存在的 *.g.cs 文件。
【讨论】:
好像我有同样的问题,但这对我不起作用。 在检查您的 xamlx:Class
与 Namespace.Class
匹配后执行此操作。
这行得通。在 Visual Studio Code 中,还必须重新启动 OmniSharp 才能强制重新构建。【参考方案5】:
这是一个非常具体的原因,它在项目设置中。每当您尝试将 WPF 控件/窗口添加到 .NET 2.0 类库或项目时,通常都会发生这种情况。此错误的原因是项目不知道它正在构建 WPF 控件或窗口,因此尝试将其构建为 C# 2.0 项目。
解决方案涉及编辑 .csproj 文件。右键单击导致问题的项目,然后选择“卸载项目”。右键单击卸载的项目并选择“Edit .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 文件,在解决方案资源管理器中右键单击它并选择“重新加载项目”编译,就是这样,你就完成了!
【讨论】:
我在写这个问题之前试过这个,但没有帮助。我认为我无法编译新项目但我的同事可以... 有点奇怪... 我也试过了,没用。添加新的导入会导致新的警告(见下文),但原来的错误仍然存在。“C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFX.targets”无法再次导入。它已在“C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.targets (76,3)”中导入。这很可能是构建创作错误。随后的导入将被忽略。 " 谢谢你,这为我解决了这个问题,在我继承的一个项目上。【参考方案6】:当我不小心从 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">
我知道这不是原始问题的答案(因为那个项目是在另一台机器上构建的),但错误消息是相同的,所以也许我会帮助解决这种情况的人。
【讨论】:
这不完全是我的问题,但它帮助我将其本地化。之后我有了没有类名的命名空间 这帮助我找到了我的问题,在我的情况下,我错过了 x:Class 行,添加它为我修复了它【参考方案7】:当您从另一个项目导入类,或更改 xaml 文件的路径,或 xaml 或 .cs 文件后面的命名空间时,您可能会收到此错误。
一个:它的命名空间可能与您在新项目中的命名空间不同
namespace TrainerB.MVC.Forms
public partial class AboutDeveloper : ContentPage
public AboutDeveloper()
InitializeComponent();
如您所见,导入文件中的命名空间以旧项目名称开头:"TrainerB",但您的新项目可能有不同的名称,因此只需将其更改为正确的新名称即可项目名称,在 .xaml 文件和后面的 .cs 文件中。
两个:
将 .xaml 文件的属性更改为:
构建操作:嵌入式资源
自定义工具: MSBuild:UpdateDesignTimeXaml
【讨论】:
天哪!非常感谢您提供的解决方案。我测试了在那里找到的所有解决方案,但没有任何效果。诀窍在于xaml
文件的属性。 +1【参考方案8】:
检查 Designer 文件。
我也有同样的问题。就我而言,原因是 FileName.Designer.cs 的 namespace
与 FileName.cs 中使用的(正确的)namespace
不匹配。 p>
更改 FileName.Designer.cs 的 namespace
以匹配 FileName.cs 的 namespace
立即解决了问题。
【讨论】:
我也遇到了命名空间问题,然后将新项目添加到项目中。问题是我在项目名称中使用了空格然后我创建了它。【参考方案9】:我遇到过这个(虽然这很大程度上是我的错,是我复制并粘贴了一些代码之后造成的);当 XAML 和后面的代码之间的命名空间不匹配时,可能会发生这种情况
EG
<UserControl x:Class="DockPanel.TreeView" />
后面的代码是
namespace NotDockPanel
【讨论】:
这让我发现我的 Designer 的命名空间不正确。谢谢!【参考方案10】:我在重命名用户控件时遇到了这个问题。我修复它的方法是注释掉 InitializeComponent,验证所有名称是否正确(xaml 和后面的代码),构建项目,取消注释 InitializeComponent,然后再次构建。听起来这个问题可能有几个原因/解决方案,但这种方式为我做到了。
【讨论】:
我没有重命名任何东西?然而,这个解决方案对我有用。 obj 文件夹中缺少 *.g.cs 和 *.g.i.cs,将其注释掉并构建项目会生成丢失的文件。不知道它是如何进入这种状态的。【参考方案11】:以上答案都不适合我。除了重复的,我都试过了。但是由于某些奇怪的原因,这在我的 Visual Studio 2015 中的跨平台项目中起作用:
-
在解决方案资源管理器中右键单击导致问题的项目。在弹出菜单中选择:添加 --> 类
选择跨平台 --> 表单 Xaml 页面。保留漂亮的 Page1.cs 标准名称,然后点击添加。
请注意之前的 InitializeComponent() 问题是如何因某种原因而消失的。
删除新创建的 Page1.cs 并继续编程,就像 Visual Studio 工作正常一样。
【讨论】:
这个对我有用。当 InitializeComponent() 开始失败时,我复制并粘贴并重命名了我拥有的用户控件。 你到底是怎么偶然发现这个修复的?我尝试了其他所有方法,这很有效。使用 VS 2017,所以问题是当前的。【参考方案12】:我同意上述命名空间必须匹配的答案。但是,我在命名空间匹配时遇到了这样的问题。
为了解决这个问题,我只是将 XAML 中的命名空间更改为不正确的名称,保存,然后将其改回正确的名称。瞧!
【讨论】:
我会将此作为评论添加到正确答案中,但我没有代表这样做:( 谢谢!在疯狂尝试各种事情后为我工作。我的解决方案最初确实没有错误,然后在 PC 睡了一段时间后再次尝试并收到错误。也许与睡眠模式有关? 我遇到了同样的问题和解决方案。我相信这与 IntelliSense 有关。更改 xaml 中的命名空间可能会触发 IntelliSense db 中相关部分的更新。这只是一个猜测。【参考方案13】:卸载整个解决方案,然后重新加载。然后重建解决方案。这为我解决了这个问题。
【讨论】:
【参考方案14】:我尝试了以上所有建议。如果您也尝试但没有成功,请获得更简单的方法。 创建一个新的 page.xaml,然后复制新类的代码并删除有问题的类 XAML。不要花更多的时间。
【讨论】:
谢谢。我需要有人这么说。【参考方案15】:如果您使用 Xamarin Forms 并移动 XAML 文件,则文件的“构建操作”会更改。 Xamarin Forms 需要“构建操作 = 嵌入式资源”。
在 Visual Studio 中应用“构建操作”:
Select the XAML file -> Properties -> Build Action = Embedded Resource
【讨论】:
先生/女士万岁!【参考方案16】:对我有帮助的 - 是将 .csproj 中的第一行更改为
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
【讨论】:
【参考方案17】:此错误的另一个常见原因是您在以下方面做了什么:
右键单击项目中的文件夹以创建新的用户控件。这将创建从文件夹命名空间中的用户控件派生的类和 xaml 文件。
然后您决定更改类的命名空间,因为您实际上只是使用文件夹来组织代码。 x:Class 属性不会自动更新,因此它将搜索不存在的类。可能可以使用更好的错误消息,例如“x:Class type could not be found in nameace bla.blaa.blaaa.”
【讨论】:
【参考方案18】:此问题的另一个解决方案是简单地将属性-> XAML 上的构建操作从嵌入式资源更改为其他任何内容,保存,然后将其更改回嵌入式资源。错误消失。
【讨论】:
如果错误出现在所有 Xaml.cs 文件中,则必须在每个 Xaml.cs 文件中进行更改。感谢您的评论,2天后解决了。 (:【参考方案19】:如果命名空间是正确的,那么也有同样的错误,
只需关闭您的应用程序并再次打开它。
这可能会解决您的问题
【讨论】:
你的意思是打开和关闭visual studio? 有时,XDesProc.exe(Microsoft Visual Studio XAML UI 设计器)会停止 Visual Studio 正常工作,并且不会正确加载 xaml 文件。所以重新启动 Visual Studio 解决了我的问题。 (您也可以进入任务管理器中的进程,并在不重新启动 Visual Studio 的情况下仅停止该进程。 我在 VS2017 中发现了这一点。我已经更改了其他所有内容,并且命名空间在所有地方都是正确的,但是 InitializeComponent() 调用出现错误,并且 xaml.cs 文件中的部分关键字有警告,例如“部分类只有一个文件”。我碰巧关闭并重新打开了解决方案,发现这两个问题都自己解决了。【参考方案20】:这发生在我身上,因为 Nuget 包卸载程序清除了 App.xaml 中 元素上的所有属性。这包括 x:Class 属性,它指定应用程序类名称。所以永远不会生成包含 InitializeComponent() 方法的部分类。
我通过将 App.xaml 还原为源代码控制副本解决了这个问题。
【讨论】:
由于缺少 x:Class 属性,我得到了同样的错误,但它与 Nuget 无关。它只是不知何故消失了,可能是一些视觉工作室的魔法。【参考方案21】:我知道这是由于不同的原因而得到回答的,但这是一个非常热门的帖子,我在类库中遇到了同样的问题。在这种情况下,结果是我的命名空间发生了变化(在这篇文章here 中回答),并且编译器无法重建定义 InitializeComponent() 方法的 Window.g.i.cs。不能,因为类库缺少 csproj 文件中 WPF 项目的 ProjectTypeGuid 值。这方面的说明是here 和here。我想我会分享以防其他人遇到同样的问题。在这种情况下,仅更改命名空间是不够的。
【讨论】:
【参考方案22】:这为我解决了这个问题。
我已经注释掉了 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
【讨论】:
【参考方案23】:对于那些在互联网上找到这个的人。如果存在编译,请检查 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>
,这就是为我解决的问题!【参考方案24】:
在某些操作之后,.cs 文件的命名空间和 .xaml 文件中的命名空间可能不同(在 xaml 中查找 x:Class="namespace.yourType")。
将它们修复为相同。
【讨论】:
【参考方案25】:我发现“启动对象”是(未设置)导致我出现此错误。
"Startup object" (Not set)
【讨论】:
问题中提到的所有其他细节都相同吗? 确切的细节并不准确,因为问题不清楚异常是如何表现出来的。然而,潜在的症状是相同的,因此我认为我的回答没有任何问题。我的意图是增加对话,因为在我的情况下没有答案/评论有帮助。我只是试图为经常出现的无法描述的编译错误添加到知识库中。 谢谢!它解决了我的问题!当我将 MainWindow.xaml 从root
移动到 View
目录时,给定选项(Startup object)似乎已自动重置。【参考方案26】:
我在创建“WPF 应用程序项目”然后将其构建目标更改为“类库”以被另一个程序用作外部工具时发生了这个问题。
我为我的 Windows 更改了所有 .xaml 文件,因此它们的构建操作设置为“页面”。我没有意识到该项目还包含“App.xaml”和“App.xaml.cs”。
“App.xaml”也需要设置为“Page”,或者完全删除(连同“App.xaml.cs”)。我做了前者,然后是后者,因为我意识到这些文件没用。
【讨论】:
为我工作。除了我离开 App.xaml 作为应用程序定义。在 WinUI3 Preview 5/Reunion 0.5 中工作。【参考方案27】:由于这似乎是有关缺少“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
s 中定义资源的方式,所以这就是我认为可行的方式。
然而,Controls:MetroWindow
并非如此!我绝对需要如下资源定义:
<Controls:MetroWindow.Resources>
<ResourceDictionary>
<prop:Resources x:Key="LocalizedStrings"/>
...
</ResourceDictionary>
</Controls:MetroWindow.Resources>
总而言之,我的问题是缺少<ResourceDictionary>
标签。我真的不知道为什么这会产生“InitializeComponent”错误,而且奇怪的是它甚至没有在我的每台机器上产生它,但这就是我修复它的方法。希望这会有所帮助(其余 0.001% 的人遇到此问题)。
【讨论】:
【参考方案28】:我刚遇到这个问题,原来是我的项目存放在我的用户文件夹中,该文件夹存放在网络上,我们有一个瞬间的网络中断。我做了一个构建;它抱怨我的文件已在编辑器之外被修改(他们没有;文件锁刚刚被破坏),并且构建良好,消除了有关 InitializeComponent()
方法的错误。
顺便说一句,如果您想知道,从网络驱动器开发某些东西是不好的做法。当您尝试利用 .NET 的托管代码时,它变得特别成问题。根据我的经验,每次构建时它都会吓坏。我忘了把这个扔掉的小项目放在正确的文件夹里,结果付出了代价。
【讨论】:
【参考方案29】:另一种可能的解释是您是针对 x86 构建的。右键单击您的解决方案并选择配置管理器。看看你是不是针对 x86 而不是 Any CPU 构建的。
【讨论】:
【参考方案30】:所以我意识到这是一个较老的问题,但我们遇到了类似的问题。我们能够使用 VS2012 构建项目,但不能从命令行使用 msbuild。我进入 .proj 文件,发现它在默认的“PropertyGroup”部分下没有“ProjectTypeGuids”的记录,所以我添加了这个:
<ProjectTypeGuids>60dc8134-eba5-43b8-bcc9-bb4bc16c2548;FAE04EC0-301F-11D3-BF4B-00C04F79EFBC</ProjectTypeGuids>
这是 WPF 的项目 GUID。然后我删除并重新添加了 UserControl 并开始工作。我不确定我是否必须做最后一步,但它现在对我有用。
【讨论】:
以上是关于当前上下文中不存在名称“InitializeComponent”的主要内容,如果未能解决你的问题,请参考以下文章