如果我在Visual Studio 2010 SP1中创建一个新项目并选择“WPF Application”并尝试构建生成的应用程序,则会收到错误
当前上下文中不存在名称“InitializeComponent”。
今天早上,当我尝试构建我当前的项目时,我遇到了类似的错误。昨天,编译和运行它没有问题。
我创建了一个新项目,每当我编译项目时都会收到错误。我刚刚将项目发送给了一位同事,他刚编译时没有任何错误。
有什么问题?
答案 0 :(得分:656)
我已经遇到过这种情况并且忘记了导致它的原因。 当我在我的代码后面重命名命名空间而不是在我的XAML中时,我碰到了这个。
所以检查一下你是否也这样做过。
名称空间和类名称需要匹配,因为它们都是部分类的一部分
namespace ZZZ
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
//...
}
}
<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
答案 1 :(得分:213)
.xaml文件的构建操作也必须设置为“页面”,当在项目之间移动xaml文件时,此设置会丢失(至少在VS 2010中)。
答案 2 :(得分:69)
对于那些(在VS2015中)在调试模式下没有错误,但做在发布模式下有指定错误(但项目运行正常)的人,这里有一些简单的尝试:< / p>
这种方法适合我。
答案 3 :(得分:24)
这有一个非常具体的原因,它在项目设置中。每当您尝试将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文件,在解决方案资源管理器中右键单击它并选择“重新加载项目”编译,就是这样,你就完成了!
答案 4 :(得分: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">
我知道这不是原始问题的答案(因为那个项目建立在另一台机器上),但错误信息是相同的,所以也许我会帮助处理这种情况的人。
答案 5 :(得分:21)
我在重构期间遇到了这个错误,我重命名了一些文件/文件夹,并且需要重新生成prexisiting * .g.cs文件。
答案 6 :(得分:16)
确保在xaml文件中
<Page x:Class="Project1.Page1" ...
匹配'Project1'名称和'Page1'名称
答案 7 :(得分:15)
从其他项目导入类,或更改xaml文件的路径或xaml或.cs文件后面的命名空间时,可能会出现此错误。
一个:它的名称空间可能与您在新项目中的名称空间不同
namespace TrainerB.MVC.Forms
{
public partial class AboutDeveloper : ContentPage
{
public AboutDeveloper()
{
InitializeComponent();
}
}
}
正如您所看到的,导入文件中的名称空间以旧项目名称开头:&#34; TrainerB&#34; ,但您的新项目可能有不同的名称,因此只需更改它在.xaml文件和后面的.cs文件中都是正确的新项目名称。
<强>两个强>
将.xaml文件的属性更改为:
构建操作:嵌入式资源
自定义工具: MSBuild:UpdateDesignTimeXaml
答案 8 :(得分:13)
我已经有了这个(虽然这是我的错,并且是在我复制并粘贴了一些代码后引起的);当命名空间在XAML和后面的代码
之间不匹配时,可能会发生这种情况EG
<UserControl x:Class="DockPanel.TreeView" />
,背后的代码是
namespace NotDockPanel
答案 9 :(得分:13)
我在重命名usercontrol时遇到了这个问题。我修复它的方法是注释掉InitializeComponent,验证所有名称是否正确(xaml和代码隐藏),构建项目,取消注释InitializeComponent,然后再次构建。听起来这个问题可能有几个原因/解决方案,但这样做对我来说。
答案 10 :(得分:9)
上述答案都不适合我。我尝试了所有这些,除了重复的。但是出于一些奇怪的原因,这在我的Visual Studio 2015中的跨平台项目中起作用:
答案 11 :(得分:8)
我同意上面的答案,命名空间必须匹配。但是,我遇到了这样的问题,即命名空间匹配。
要修复,我只需将XAML中的命名空间更改为INCORRECT,保存,然后将其更改回CORRECT。瞧!
答案 12 :(得分:7)
如果您正在使用Xamarin Forms并移动XAML文件,则会更改该文件的“构建操作”。 Xamarin Forms需要“构建动作=嵌入式资源”。
在Visual Studio中应用“构建操作”:
Select the XAML file -> Properties -> Build Action = Embedded Resource
答案 13 :(得分:7)
卸载整个解决方案,然后重新加载。然后重建解决方案。这解决了我的问题。
答案 14 :(得分:7)
检查 Designer 文件。
我有同样的问题。就我而言,原因是 FileName.Designer.cs 的namespace
与 FileName.cs namespace不匹配>。
更改 FileName.Designer.cs 的namespace
与 FileName.cs 的store.json.all_text_mode
即可解决问题。
答案 15 :(得分:6)
此错误的另一个常见原因是您在此处执行了某些操作:
右键单击项目中的文件夹以创建新的UserControl。这将创建一个类和xaml文件,该文件派生自文件夹命名空间中的用户控件。
然后您决定更改类的名称空间,因为您实际上只是使用文件夹来组织代码。 x:Class属性不会自动更新,因此它将搜索不存在的类。可能会使用更好的错误消息,例如“x:在名称bla.blaa.blaaa中找不到类类型。”
答案 16 :(得分:6)
我尝试了上面的所有建议。如果你尝试没有成功,那就更容易了。 创建新的page.xaml 然后复制新类的代码和删除类XAML有问题。不要花更多的时间。
答案 17 :(得分:4)
对我有帮助的-是将.csproj中的第一行更改为
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
答案 18 :(得分:4)
此问题的另一个解决方案是简单地更改属性 - >在XAML上构建对嵌入式资源的操作,保存,然后将其更改回嵌入式资源。错误消失了。
答案 19 :(得分: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>
答案 20 :(得分:3)
我发现&#34; Startup对象&#34;是(未设置)给我造成了这个错误。
答案 21 :(得分:3)
这件事发生在我身上,因为Nuget软件包卸载程序会清除&lt; Application&gt;上的所有属性。 App.xaml中的元素。这包括x:Class属性,它指定应用程序类名称。因此,从未生成包含InitializeComponent()方法的partial类。
我通过将App.xaml还原为源代码控制副本来解决问题。
答案 22 :(得分:3)
在执行某些操作后,.cs文件的名称空间和.xaml文件中的名称空间可能不同(在xaml中查找x:Class =“namespace.yourType”)。
修复它们是一样的。
答案 23 :(得分:3)
由于这似乎是关于遗失&#39; InitializeComponent&#39;的问题的首选主题,我将在此处提供我的答案。
我也遇到了这个问题,我已经尝试过我在这里找到的所有内容以及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>
标记。我真的不知道为什么这会产生初始化成分&#39;错误,它奇怪地甚至没有在我的每台机器上生产它,但这就是我如何解决它。希望这会有所帮助(其余0.001%的人遇到此问题)。
答案 24 :(得分:3)
如果命名空间正确,那么也会出现同样的错误,
只需关闭您的应用并再次打开。
这可以解决您的问题
答案 25 :(得分: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>
评论thiis以修复构建错误。
<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
}
答案 26 :(得分:3)
我知道这是因为原因不同而得到了解答,但这是一个非常热门的帖子,我遇到了与类库相同的问题。在这种情况下,结果是我的命名空间的变化(在这篇文章here中回答)并且编译器无法重建定义InitializeComponent()方法的Window.g.i.cs。它不可能,因为类库缺少csproj文件中WPF项目的ProjectTypeGuid值。有关此问题的说明是here和here。我想我会分享以防其他人遇到同样的问题。在这种情况下,仅更改命名空间是不够的。
答案 27 :(得分:2)
此线程中MCVE的最佳镜头是VS2017 15.5.2,加载 LabelControlAdvancedSample 的XAML,这是this tutorial page中的最后一个示例。
<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&amp;默认情况下,App.xaml.cs尝试编译以上内容会产生链接器错误。
幸运的是,当鼠标悬停在 LabelControlAdvancedSample.xaml.cs 中的InitializeComponent()语句上时,会出现一个链接的文本提示:
显示可能的修复方法。
点击它会调用另一个链接文字:
生成方法 MainWindow.InitializeComponent。
执行此操作会产生以下“无所事事”方法:
private void InitializeComponent()
{
throw new NotImplementedException();
}
必须为要构建的项目定义该函数。看起来WPF中 InitializeComponent 的实现与VB.Net不同。
编辑:xaml第一行中的namespace.class不正确。
根据{{3}}和@Sean B的MSDN,它应该是
<Window x:Class="LabelControlAdvancedSample.MainWindow"
因此,项目编译时没有错误,并且不需要虚拟的InitializeComponent方法,实际上它会产生更多错误。即使在非常罕见的用户错误情况下,显示VS也会有所帮助。 :P
答案 28 :(得分:2)
由于某些原因,在复制.xaml和项目之间的.cs后,构建操作有时会发生变化。请确保.xaml的构建操作是Page。
答案 29 :(得分:2)
在我的案例中,我的项目中有一个参考,但是没有报告。
我解读了我的所有参考资料,即使它们是正确的。
答案 30 :(得分:2)
另一个可能的解释是你正在构建x86。右键单击解决方案,然后选择Configuration Manager。看看你是在构建x86而不是任何CPU。
答案 31 :(得分:2)
我刚刚遇到这个问题,结果是我的项目存储在我的用户文件夹中,该文件存储在网络上,我们有一个短暂的网络中断。我做了一个构建;它抱怨我的文件已在编辑器外修改过(他们没有;文件锁刚刚被剔除),并且构建正常,删除了有关InitializeComponent()
方法的错误。
答案 32 :(得分:2)
所以我意识到这是一个较老的问题,但我们遇到了类似的问题。我们能够使用VS2012构建项目,但不能从命令行使用msbuild。我进入了.proj文件,发现它没有记录&#34; ProjectTypeGuids&#34;在默认的&#34; PropertyGroup&#34;部分,所以我补充说:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
这是WPF的项目GUID。然后我删除并重新添加UserControl,它开始工作。我不确定我是否必须做最后一步,但它现在适用于我。
答案 33 :(得分:2)
在创建“WPF应用程序项目”,然后将其构建目标更改为“类库”以供另一个程序用作外部工具时,我遇到了这个问题。
我为我的Windows更改了所有.xaml文件,因此他们的构建操作设置为“Page”。我没有意识到的是该项目还包含“App.xaml”和“App.xaml.cs”。
“App.xaml”也需要设置为“Page”,或者完全删除(以及“App.xaml.cs”)。我做了前者,然后是后者,因为我意识到文件没用。
答案 34 :(得分:1)
我在VS2017 Xamarin.Forms项目中遇到了同样的问题。阅读此错误链接:
https://bugzilla.xamarin.com/show_bug.cgi?id=33181#c53
要解决这种情况下的问题,请执行以下操作:右键单击[xaml-file-name].xaml
,选择Properties
,然后将Build Action
更改为Content
,然后再更改为Embedded resource
答案 35 :(得分:1)
其他选项:
在我使用Xamarin Forms的情况下,App.xaml文件中的 InitializeComponent'在当前上下文中不存在错误,我在输出中还注意到.csproj文件没建。很奇怪。
除了以下两个ItemGroup条目之外,文件本身对我来说并不突出:
<ItemGroup>
<EmbeddedResource Remove="App.xaml" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml" />
</ItemGroup>
我从.csproj文件中删除了这两个文件,执行了清理和重建操作,错误最终消失了。解决问题如此痛苦,也许这将有助于其他人避免日后的压力。
答案 36 :(得分:1)
对于我来说,程序实例已经在后台运行。我只是停止正在运行的实例并成功构建程序。
答案 37 :(得分:1)
我有同样的问题,期望我将我的MainWindow xaml和cs处理成一个新文件,然后将它们复制回原来的位置。尝试编译WPF应用程序后,我遇到了这个错误。
我为修复此错误所做的是重命名命名空间(来自egNamespace - &gt; egNamespaceNew,然后再次工作。然后我将命名空间更改回原来的。
答案 38 :(得分:1)
右键单击项目中的文件夹以创建新的UserControl,这对我来说是个问题。 我在文件夹旁创建了相同的控件,就是这样。
答案 39 :(得分:0)
我有同样的问题,我不得不将我的共享项目转换为可移植的类库。
答案 40 :(得分:0)
我遇到了同样的问题,但在我的情况下,这一切都没有帮助。在我的情况下,我所拥有的每个WPF项目(包括新制作的项目)都停止了这个错误的编译。最终我卸载了所有.Net框架,然后重新安装它们,事情又重新开始了。我也重新安装了Visual Studio,但事实证明它没有任何影响。
答案 41 :(得分:0)
希望这也适合你。
答案 42 :(得分:0)
在我的情况下(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控件的问题。
答案 43 :(得分:0)
在我向解决方案配置管理器中添加了新平台“ x86”之后,我也收到了此错误消息。之前只有“任何CPU”。该解决方案仍在运行,但在错误窗口中显示了多个错误消息。
我发现问题在于,在项目属性中,“输出路径”现在指向“ bin \ x86 \ Debug”。这是由Configuration Manager在添加操作中放入的。 “ Any CPU”平台的输出路径始终只是“ bin”(因为此测试项目从未在发布模式下构建),因此配置管理器认为它应该自己添加“ \ x86 \ Debug”。从错误消息中没有任何迹象表明构建输出可能是原因,而且我仍然不了解项目甚至如何这样运行。对于新的“ x86”配置中的所有项目,将其设置为“ bin”后,所有错误均消失。
答案 44 :(得分:0)
使用最新的VS2019 16.7.5时,我没有更改代码,但出现了问题。
只需打开相应的XAML文件即可解决该问题。
答案 45 :(得分:0)
我在 WPF 中遇到了类似的问题。我复制了一个用户控件,但忘记为它重命名 its.xaml.cs 文件中的公共 ViewModel 属性。但仍然没有工作。我最终删除了项目的 obj\debug 类型文件夹中的所有文件(我们以不同的方式命名)。并重建它。它仍然无法正常工作,我退出了 Visual Studio。 (在此之前,我曾经有过两个 Visual Studio 实例,我想可能是这样。)我遇到的问题是它在我已经修复它时报告它有这个错误!当我回到 Visual Studio 时(删除 obj 中的调试内容后),终于没有错误指示器了。然后我重建了项目,现在一切都很好!
这不是我在这里做事的确切顺序。它需要简化。