如果我在 Visual Studio 2010 SP1 中创建一个新项目并选择“WPF 应用程序”并尝试构建生成的应用程序,我会收到错误消息
当前上下文中不存在名称“InitializeComponent”。
今天早上我尝试构建当前项目时遇到了类似的错误。昨天,我编译和运行它没有问题。
我创建了一个新项目,每次编译项目时都会出错。我刚刚把项目发给了一位同事,他刚刚编译,没有任何错误。
怎么了?
如果我在 Visual Studio 2010 SP1 中创建一个新项目并选择“WPF 应用程序”并尝试构建生成的应用程序,我会收到错误消息
当前上下文中不存在名称“InitializeComponent”。
今天早上我尝试构建当前项目时遇到了类似的错误。昨天,我编译和运行它没有问题。
我创建了一个新项目,每次编译项目时都会出错。我刚刚把项目发给了一位同事,他刚刚编译,没有任何错误。
怎么了?
我遇到过几次,一直忘记是什么原因造成的。当我在我的代码隐藏文件中重命名命名空间但不在我的 XAML 中时,我遇到了这个问题。
所以检查你是否做了同样的事情。
命名空间和类名需要匹配,因为它们都是部分类的一部分
namespace ZZZ
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
//...
}
}
<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
.xaml 文件的构建操作也必须设置为“页面”,在项目之间移动 xaml 文件时,此设置会丢失(至少在 VS 2010 中)。
对于那些在 Debug 模式下没有错误,但在 Release 模式下确实有指定错误(但项目运行良好)的人,这里有一些简单的尝试:
这种方法在 VS 2015 中对我有用,根据其他用户的说法,也适用于 2017 年和 2019 年
我在重构过程中遇到了这个错误,我重命名了一些文件/文件夹,并且需要重新生成预先存在的 *.g.cs 文件。
这有一个非常具体的原因,它在项目设置中。每当您尝试将 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 文件,在解决方案资源管理器中右键单击它并选择“重新加载项目”编译,就是这样,你就完成了!
当我不小心从 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">
我知道这不是原始问题的答案(因为那个项目是在另一台机器上构建的),但是错误消息是一样的,所以也许我会帮助解决这种情况的人。
当您从另一个项目导入一个类,或者更改 xaml 文件的路径,或者 xaml 或后面的 .cs 文件的命名空间时,您可能会收到此错误。
一:它的命名空间可能与您在新项目中的命名空间不同
namespace TrainerB.MVC.Forms
{
public partial class AboutDeveloper : ContentPage
{
public AboutDeveloper()
{
InitializeComponent();
}
}
}
如您所见,导入文件中的名称空间以旧项目名称开头:"TrainerB",但您的新项目可能有不同的名称,因此只需在 .xaml 文件和 .xaml 文件中将其更改为正确的新项目名称后面的 .cs 文件。
二:
将 .xaml 文件的属性更改为:
构建操作:嵌入式资源
自定义工具: MSBuild:UpdateDesignTimeXaml
检查设计器文件。
我有同样的问题。就我而言,原因是namespace
for FileName.Designer.cs与FileName.csnamespace
中使用的(正确)不匹配。
更改FileName.Designer.csnamespace
以匹配FileName.cs立即解决了问题。
我遇到过这个(尽管这在很大程度上是我的错,并且是在我复制并粘贴了一些代码之后引起的);当命名空间在 XAML 和后面的代码之间不匹配时,可能会发生这种情况
例如
<UserControl x:Class="DockPanel.TreeView" />
后面的代码是
namespace NotDockPanel
我在重命名用户控件时遇到了这个问题。我修复它的方法是注释掉 InitializeComponent,验证所有名称是否正确(xaml 和后面的代码),构建项目,取消注释 InitializeComponent,然后再次构建。听起来这个问题可能有几个原因/解决方案,但这种方式为我做到了。
以上答案都不适合我。除了重复的,我都试过了。但是由于某些奇怪的原因,这在我的 Visual Studio 2015 中的跨平台项目中起作用:
卸载整个解决方案,然后重新加载。然后重建解决方案。这为我解决了这个问题。
我同意上面的答案,即名称空间必须匹配。但是,我在命名空间匹配的地方遇到了这样的问题。
为了解决这个问题,我只是将 XAML 中的命名空间更改为不正确的名称,保存,然后将其更改回正确的名称。瞧!
如果您使用 Xamarin Forms 并移动 XAML 文件,则文件的“构建操作”会更改。Xamarin Forms 需要“构建操作 = 嵌入式资源”。
在 Visual Studio 中应用“构建操作”:
Select the XAML file -> Properties -> Build Action = Embedded Resource
对我有帮助的 - 是将 .csproj 中的第一行更改为
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
我尝试了上面的所有建议。如果您也尝试但没有成功,请获得更简单的方法。创建一个新的 page.xaml,然后复制新类的代码并删除有问题的类 XAML。不要花更多的时间。
此错误的另一个常见原因是如果您在此执行了某些操作:
右键单击项目中的文件夹以创建新的 UserControl。这将创建从文件夹命名空间中的用户控件派生的类和 xaml 文件。
然后您决定更改类的名称空间,因为您实际上只是使用文件夹来组织代码。x:Class 属性不会自动更新,因此它将搜索一个不存在的类。可能会使用更好的错误消息,例如“x:Class type could not be found in namesace bla.blaa.blaaa.”
此问题的另一个解决方案是简单地将 XAML 上的属性-> 构建操作从嵌入式资源更改为其他任何内容,保存,然后将其更改回嵌入式资源。错误消失。
如果命名空间是正确的,那么也会有同样的错误,
只需关闭您的应用程序并再次打开它。
这可能会解决您的问题
这发生在我身上,因为 Nuget 包卸载程序清除了 App.xaml 中 <Application> 元素上的所有属性。这包括 x:Class 属性,它指定应用程序类名称。因此,从未生成包含 InitializeComponent() 方法的分部类。
我通过将 App.xaml 还原为源代码控制副本解决了这个问题。
这为我解决了。
我已经注释掉了 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>
评论 thisis 以修复构建错误。
<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
}
对于那些在互联网上找到这个的人。如果存在编译,请检查 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>
由于这似乎是有关缺少“InitializeComponent”的问题的首选线程,因此我将在此处提供我的答案。
我也遇到了这个问题,我已经尝试了我在这里和谷歌可以找到的所有其他论坛中找到的所有内容,但是没有一个为我解决了这个问题。经过两个小时的尝试,我终于弄清楚我的设置出了什么问题。
在我们的项目中,我们使用来自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 中定义 Resources 的方式,所以这就是我认为可行的方式。
但是,情况并非如此Controls:MetroWindow
!我绝对需要如下资源定义:
<Controls:MetroWindow.Resources>
<ResourceDictionary>
<prop:Resources x:Key="LocalizedStrings"/>
...
</ResourceDictionary>
</Controls:MetroWindow.Resources>
因此,总而言之,我的问题是缺少<ResourceDictionary>
标签。我真的不知道为什么这会产生“InitializeComponent”错误,而且奇怪的是它甚至没有在我的每台机器上产生它,但这就是我修复它的方法。希望这会有所帮助(其余 0.001% 的人遇到此问题)。
我发现“启动对象”是(未设置)对我造成此错误。
这个问题发生在我创建“WPF 应用程序项目”然后将其构建目标更改为“类库”以被另一个程序用作外部工具时。
我为我的 Windows 更改了所有 .xaml 文件,因此它们的构建操作设置为“页面”。我没有意识到该项目还包含“App.xaml”和“App.xaml.cs”。
“App.xaml”也需要设置为“Page”,或者完全删除(连同“App.xaml.cs”)。我做了前者,然后是后者,因为我意识到这些文件没用。
在某些操作之后,.cs 文件的命名空间和 .xaml 文件中的命名空间可能不同(在 xaml 中查找 x:Class="namespace.yourType")。
将它们修复为相同。
所以我意识到这是一个较老的问题,但我们遇到了类似的问题。我们能够使用 VS2012 构建项目,但不能从命令行使用 msbuild。我进入 .proj 文件并注意到它在默认的“PropertyGroup”部分下没有“ProjectTypeGuids”的记录,所以我添加了这个:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
这是 WPF 的项目 GUID。然后我删除并重新添加了 UserControl 并开始工作。我不确定我是否必须做最后一步,但它现在对我有用。
刚遇到这个问题,原来是我的项目存放在我的用户文件夹中,这个文件夹存放在网络上,我们出现了瞬间网络中断。我做了一个构建;它抱怨我的文件已在编辑器之外被修改(他们没有;文件锁刚刚被破坏),它构建得很好,消除了有关该InitializeComponent()
方法的错误。
顺便说一句,如果您想知道,从网络驱动器开发某些东西是不好的做法。当您尝试利用 .NET 的托管代码时,它变得特别成问题。根据我的经验,每次构建时它都会吓坏。我忘了把这个一次性的小项目放在正确的文件夹中,最终付出了代价。
在这个线程中,最好的 MCVE 镜头是使用 VS2017 15.5.2 加载LabelControlAdvancedSample的 XAML,这是本教程页面中的最后一个示例。
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlAdvancedSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Target="{Binding ElementName=txtName}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
<AccessText Text="_Name:" />
</StackPanel>
</Label>
<TextBox Name="txtName" />
<Label Target="{Binding ElementName=txtMail}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
<AccessText Text="_Mail:" />
</StackPanel>
</Label>
<TextBox Name="txtMail" />
</StackPanel>
在默认情况下保留 App.xaml 和 App.xaml.cs 后,尝试编译上述内容会产生链接器错误。
幸运的是,当将鼠标悬停在LabelControlAdvancedSample.xaml.cs中的 InitializeComponent() 语句上时,会出现一个链接文本提示:
显示潜在的修复。
单击它会调用另一个链接文本:
生成方法MainWindow.InitializeComponent。
这样做会产生以下“什么都不做”方法:
private void InitializeComponent()
{
throw new NotImplementedException();
}
必须为要构建的项目定义函数。看起来 WPF 中InitializeComponent到VB.Net的实现有所不同。
编辑:xaml 第一行中的 namespace.class 不正确。根据MSDN和@Sean B 的回答,应该是
<Window x:Class="LabelControlAdvancedSample.MainWindow"
因此项目编译没有错误,并且不需要虚拟 InitializeComponent 方法,实际上它会产生更多错误。去展示 VS 可能会有所帮助,即使在极少数的用户错误情况下也是如此。:P
由于某些原因,在复制 .xaml 和项目之间的 .cs 之后,构建操作有时会发生变化。请确保您的 .xaml 的构建操作是 Page。
我在 VS2017,Xamarin.Forms 项目中遇到了同样的问题。阅读此错误链接:
https://bugzilla.xamarin.com/show_bug.cgi?id=33181#c53
要解决这种情况下的问题:右键单击[xaml-file-name].xaml
,选择Properties
,然后将 更改为Build Action
,Content
然后返回Embedded resource
。
另一种可能的解释是您正在针对 x86 构建。右键单击您的解决方案并选择配置管理器。看看你是不是针对 x86 而不是 Any CPU 构建的。
在我的情况下,我的项目中有一个参考是错误的,但没有报告。
我通过阅读所有参考资料解决了我的问题,即使它们的意思是正确的。
我遇到了同样的问题,希望我将 MainWindow xaml 和 cs 处理到一个新文件中,然后将它们复制回原来的位置。然后在尝试编译 WPF 应用程序后出现此错误。
我为解决此错误所做的工作是重命名命名空间(从 egNamespace -> egNamespaceNew,它再次起作用。然后我将命名空间改回原来的命名空间。
右键单击项目中的文件夹以创建新的 UserControl,这对我来说是个问题。我在文件夹外创建了相同的控件,就是这样。
我在 WPF 中遇到了类似的问题。我复制了一个用户控件,但忘记在其.xaml.cs 文件中为它重命名公共 ViewModel 属性。但仍然没有工作。我最终删除了项目的 obj\debug 类型文件夹中的所有文件(我们的命名不同)。并重建它。它仍然无法正常工作,我退出了 Visual Studio。(在此之前,我曾经有过两个 Visual Studio 实例,我想可能是。)我遇到的问题是它报告它有这个错误,而我已经修复了它!当我回到 Visual Studio 时(删除 obj 中的调试内容后),终于没有错误指示器了。然后我重建了项目,现在一切都很好!
这不是我在这里做事的确切顺序。它需要被简化。
在我的情况下,程序实例已经在后台运行。我只是停止正在运行的实例并成功构建程序。
附加选项:
在我使用 Xamarin Forms 的情况下,除了在我的 App.xaml 文件中的当前上下文错误中不存在“InitializeComponent”之外,我还在输出中注意到 .csproj 文件无法构建。诡异的。
除了这两个 ItemGroup 条目之外,文件本身中没有任何东西对我来说很突出:
<ItemGroup>
<EmbeddedResource Remove="App.xaml" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml" />
</ItemGroup>
我从 .csproj 文件中删除了这两个文件,执行了清理和重建,错误终于消失了。解决这个问题是如此痛苦,也许这会帮助其他人避免一些压力。
在我的情况下(NET Core 3.1),我通过在项目文件的部分中给它一个AssemblyName
标签来修复它。ProjectGroup
例如
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
<AssemblyName>ProjectNameUsually</AssemblyName>
</PropertyGroup>
...
</Project>
这也解决了编译器在代码隐藏中没有通过其 x:Name 看到控件的问题。
我遇到了同样的问题,但就我而言,这些都没有帮助。在我的情况下,我拥有的每个 WPF 项目(包括新创建的项目)都停止编译并出现此错误。最终,我卸载了所有的 .Net 框架,然后重新安装了它们,一切又开始工作了。我还重新安装了 Visual Studio,但结果没有任何影响。
我有同样的问题,我必须将我的共享项目转换为可移植类库。
是的,有很多事情可以......我会添加这个......确保 App.xaml 指向您的命名空间(您的应用程序文件所在的位置)+ .App 例如。x:Class="DX.App" <=== 确保这是 App 而不是主页名称
希望这对你也有效。
OK this.InitializeComponent();
Wrong this.InitializeComponent;
在将新平台“x86”添加到解决方案配置管理器后,我也收到了此错误消息。之前它只有“任何 CPU”。该解决方案仍在运行,但在错误窗口中显示了多个这些错误消息。
我发现问题是在项目属性中,“输出路径”现在指向“bin\x86\Debug”。这是配置管理器在添加操作中放入的。'Any CPU' 平台的输出路径总是只是“bin”(因为这个测试项目从未在发布模式下构建),所以配置管理器认为它应该自己添加“\x86\Debug”。错误消息中没有任何迹象表明构建输出可能是原因,我仍然不明白该项目是如何运行的。在将新的“x86”配置中的所有项目设置为“bin”后,所有错误都消失了。
我的方法是关闭解决方案并删除解决方案路径下的“.vs”文件夹。
(它会让你失去所有的编辑器状态——打开的文件列表、窗口位置和错误缓存)
它总是有效的。
问题出现了,而我没有使用最近的 VS2019 16.7.5 更改代码。
只需打开编辑相应的 XAML 文件即可解决问题。