如果我在Visual Studio 2010 SP1中创建一个新项目,并选择“WPF应用程序”,并尝试构建生成的应用程序,我会得到错误
名称“InitializeComponent”在当前上下文中不存在。
今天早上,当我试图构建当前项目时,我遇到了类似的错误。昨天,我编译和运行它没有问题。
我创建了一个新项目,每当我编译项目时,都会得到错误。我刚刚把项目发给了同事,他刚刚编译完成,没有任何错误。
怎么了?
这有一个非常具体的原因,它在项目设置中。当您试图将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文件,在解决方案资源管理器中右键单击它,并选择“重新加载项目”编译,就是这样,您都完成了!
所以检查一下你是否做了同样的事情。
名称空间和类名称需要匹配,因为它们都是分部类的一部分
namespace ZZZ { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow { //... } } <!-- XAML --> <Window x:Class="ZZZ.MainWindow">
.xaml文件的构建动作也必须设置为“Page”,当在项目之间移动xaml文件时,这个设置会丢失(至少在VS 2010中是这样)。
这发生在我身上,因为一个Nuget包卸载程序吹走了所有的属性在<Application>元素。这包括x:Class属性,它指定应用程序类名。因此从未生成包含InitializeComponent()方法的分部类。
我通过将App.xaml恢复到源控制副本来解决这个问题。
我在重命名用户控件时遇到了这个问题。我修复它的方法是注释掉InitializeComponent,验证所有名称都是正确的(xaml和后面的代码),构建项目,取消InitializeComponent的注释,然后再次构建。听起来这个问题可能有几个原因/解决方案,但这种方法对我来说很管用。
这为我解决了问题。
我已经注释掉了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 }
我在重构过程中遇到了这个错误,我重命名了一些文件/文件夹,并且需要重新生成预先存在的*.g.cs文件。
*.g.cs
是的,很多事情都可以…我要加上这一条…… 确保app .xaml指向你的命名空间(app文件所在的位置)+ .App 如。 x: Class = " DX。App" <===确保这是App而不是主页名
希望这也适用于你。
我也有同样的问题,但对我来说,这些都没用。在我的情况下,我拥有的每个WPF项目(包括新创建的项目)都停止编译此错误。最后,我卸载了所有的。net框架,然后重新安装了它们,一切又开始工作了。我还重新安装了Visual Studio,但结果没有影响。
导致这个错误的另一个常见原因是:
右键单击项目中的文件夹以创建新的UserControl。这将在文件夹的名称空间中创建一个派生自用户控件的类和xaml文件。
然后决定更改类的名称空间,因为实际上只是使用文件夹组织代码。Class属性不会自动更新,因此它将搜索一个不存在的类。也许可以使用更好的错误消息,如“x:类类型无法在命名空间bla.blaa.blaaa中找到。”
我遇到过这种情况(尽管这在很大程度上是我的错,是在我复制并粘贴了一些代码之后造成的);当命名空间在XAML和后面的代码之间不匹配时,就会发生这种情况
如
<UserControl x:Class="DockPanel.TreeView" />
后面的代码是
namespace NotDockPanel
我有同样的问题,期望我把我的主窗口xaml和cs复制到一个新文件,然后把它们复制回原来的地方。在尝试编译WPF应用程序后,我得到了这个错误。
我修复这个错误的方法是重命名命名空间(from egNamespace -> egNamespaceNew),它再次工作。然后我将名称空间改回原来的名称空间。
当我不小心从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">
我知道这不是最初问题的答案(因为这是在另一台机器上构建的项目),但错误消息是一样的,所以也许我会帮助别人解决这种情况。
我也有同样的问题,我必须把我的共享项目转换成一个可移植的类库。
我知道这是一个老问题了,但我们也遇到过类似的问题。我们能够使用VS2012构建一个项目,但不能从命令行使用msbuild。我进入。proj文件,并注意到它在默认的“PropertyGroup”部分下没有“ProjectTypeGuids”的记录,所以我添加了这个:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
这是WPF的项目GUID。然后我删除并重新添加UserControl,它开始工作。我不确定我是否必须做最后一步,但现在它对我有用。
我刚刚遇到了这个问题,原来是我的项目存储在我的用户文件夹中,它存储在网络上,我们有一个短暂的网络中断。我做了一个模型;它抱怨说,我的文件在编辑器之外被修改了(其实没有;文件锁刚刚被borked),并且它构建良好,消除了关于InitializeComponent()方法的错误。
InitializeComponent()
顺便说一句,如果你想知道,从网络驱动器开发一些东西是不好的做法。当你试图利用。net的托管代码时,这就变得特别成问题;根据我的经验,每次你建造的时候它都会崩溃。我忘了把这个一次性的小项目放在合适的文件夹里,最终付出了代价。
给那些在网上找到这个的人。检查窗户。Csproj文件,如果那里有编译。应该有2项
<Page Include="YourFile.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> <Compile Include="YourFile.xaml.cs"> <DependentUpon>YourFile.xaml</DependentUpon> </Compile>
如果命名空间是正确的,那么也有一个相同的错误,
只需关闭应用程序并重新打开。
这也许能解决你的问题
另一种可能的解释是,您正在针对x86进行构建。右键单击解决方案并选择配置管理器。看看你是否在x86而不是任何CPU上构建。
对于那些在调试模式中没有错误,但做在发布模式中有指定的错误(但项目运行正常)的人来说,这里有一些简单的尝试:
这种方法在VS 2015中对我有效,根据其他用户的说法,在2017年和2019年也是如此
在一些操作之后,.cs文件的命名空间和。xaml文件中的命名空间可能是不同的(在xaml中查找x:Class="namespace. yourtype ")。
使它们相同。
由于某些原因,在复制。xaml和项目之间的。cs之后,构建操作有时会发生变化。请确保您的。xaml的构建操作为Page。
在我的情况下,我的项目中有一个错误的引用,但没有报告。
我通过阅读我所有的推荐信来解决我的问题,即使它们是正确的。
我发现“启动对象”(未设置)为我导致此错误。
"启动对象"(未设置) .
我同意上面的答案,即名称空间必须匹配。但是,我遇到了这样一个问题,即名称空间匹配。
为了解决这个问题,我简单地将XAML中的名称空间更改为不正确的名称空间,保存,然后将其更改为正确的名称空间。瞧!
这个问题发生在我创建一个“WPF应用程序项目”,然后将其构建目标更改为“类库”,以供另一个程序用作外部工具时。
我改变了我所有的。xaml文件为我的窗口,使他们的构建动作设置为“页”。我没有意识到的是,该项目还包含“App.xaml”和“App.xaml.cs”。
“App.xaml”也需要设置为“Page”,或者完全删除(连同“App.xaml.cs”)。我选择了前者,当我意识到这些文件毫无用处时,我选择了后者。
当您从另一个项目导入类,或更改xaml文件的路径,或xaml或.cs文件后面的名称空间时,可能会出现此错误。
一:它可能有一个与你在新项目中拥有的不相同的命名空间
namespace TrainerB.MVC.Forms { public partial class AboutDeveloper : ContentPage { public AboutDeveloper() { InitializeComponent(); } } }
正如您所看到的,导入文件中的名称空间以旧项目名称“TrainerB”开始,但您的新项目可能有不同的名称,因此只需在.xaml文件和后面的.cs文件中将其更改为正确的新项目名称。
二:
将.xaml文件的属性更改为:
建立行动:嵌入式资源
自定义工具: MSBuild: UpdateDesignTimeXaml
. > .
此问题的另一个解决方案是简单地将属性-> Build Action从嵌入式资源更改为其他任何内容,保存,然后将其更改为嵌入式资源。错误消失了。
上面的答案对我都没用。除了那些重复的我都试过了。然而,由于一些奇怪的原因,这在我的Visual Studio 2015的跨平台项目中起作用:
因为这似乎是关于缺少'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>
这就是我在所有其他视图中的UserControls中定义Resources的方式,所以我认为这是可行的。
UserControl
然而,这不是Controls:MetroWindow!在那里,我绝对需要如下的资源定义:
Controls:MetroWindow
<Controls:MetroWindow.Resources> <ResourceDictionary> <prop:Resources x:Key="LocalizedStrings"/> ... </ResourceDictionary> </Controls:MetroWindow.Resources>
总之,我的问题是缺少<ResourceDictionary>标记。我真的不知道为什么这会产生'InitializeComponent'错误,奇怪的是,它甚至没有在我的每台机器上产生它,但这就是我如何修复它。希望这对(剩下的0.001%遇到这个问题的人)有所帮助。
<ResourceDictionary>
我尝试了上面所有的建议。如果你太努力而没有成功,那就走更容易的路。创建一个新的page.xaml然后复制新类的代码和有问题的删除类XAML。不要花更多的时间。
卸载整个解决方案,然后重新加载。然后重新构建解决方案。这为我解决了问题。
如果您正在使用Xamarin Forms,并且您移动了一个XAML文件,那么该文件的“构建操作”将被更改。Xamarin Forms要求“构建动作=嵌入式资源”。
在Visual Studio中应用“build action”:
Select the XAML file -> Properties -> Build Action = Embedded Resource
在这个线程中,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默认情况下,尝试编译上面的代码会产生链接器错误。< br > 幸运的是,当鼠标悬停在LabelControlAdvancedSample.xaml.cs中的InitializeComponent()语句上时,会有一个链接文本提示:
显示可能的修复。
点击它会调用另一个链接文本:
生成方法 MainWindow.InitializeComponent。
这样做会产生以下“do nothing”方法:
private void InitializeComponent() { throw new NotImplementedException(); }
必须为要构建的项目定义函数。看起来WPF中的InitializeComponent和VB。网的实现有些不同。< br > 编辑: xaml第一行中的namespace.class不正确。 根据MSDN和@Sean B的回答,它应该是
<Window x:Class="LabelControlAdvancedSample.MainWindow"
因此,项目编译没有错误,并且不需要虚拟的InitializeComponent方法,实际上它会产生更多的错误。去显示VS是有帮助的,即使在极其罕见的用户错误的情况下。: P
我知道这个问题是由于不同的原因而被回答的,但这是一个高度热门的帖子,我在类库中遇到了同样的问题。在这种情况下,它被证明是我的命名空间的变化(在这篇文章在这里中回答)和编译器无法重建定义InitializeComponent()方法的windows .g.i.cs。这是因为类库在csproj文件中缺少WPF项目的ProjectTypeGuid值。这方面的指令是在这里和在这里。我想我应该分享一下,以防其他人遇到同样的问题。在这种情况下,仅仅更改名称空间是不够的。
我在VS2017 Xamarin中也遇到了同样的问题。形式的项目。阅读此错误链接:
https://bugzilla.xamarin.com/show_bug.cgi?id=33181#c53
要在这种情况下解决问题:右键单击[xaml-file-name].xaml,选择Properties,然后将Build Action更改为Content,然后返回Embedded resource。
[xaml-file-name].xaml
Properties
Build Action
Content
Embedded resource
在我的情况下,程序实例已经在后台运行。我只是停止运行实例和程序构建成功。
检查Designer文件。
我也有同样的问题。在我的例子中,原因是FileName.Designer.cs的namespace与FileName.cs中使用的(正确的)namespace不匹配。
namespace
修改FileName.Designer.cs的namespace以匹配FileName.cs的namespace立即解决了问题。
帮助我的是将.csproj中的第一行更改为
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
其他选项:
在我使用Xamarin Forms的情况下,在我的App.xaml文件中的'InitializeComponent'在当前上下文中不存在错误之上,我还在输出中注意到.csproj文件无法构建。奇怪。
除了下面两个ItemGroup条目外,文件本身没有什么特别引人注目的:
<ItemGroup> <EmbeddedResource Remove="App.xaml" /> </ItemGroup> <ItemGroup> <ApplicationDefinition Include="App.xaml" /> </ItemGroup>
我从.csproj文件中删除了这两个文件,执行了清理和重建,错误最终消失了。解决这个问题很痛苦,也许这将帮助其他人避免一些压力。
在我的情况下(NET Core 3.1),我通过在项目文件的ProjectGroup部分中给它一个AssemblyName标记来修复它。如。
ProjectGroup
AssemblyName
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <UseWPF>true</UseWPF> <AssemblyName>ProjectNameUsually</AssemblyName> </PropertyGroup> ... </Project>
这也修复了编译器在代码背后看不到x:Name控件的问题。
在我将一个新的平台“x86”添加到解决方案配置管理器后,我也有这个错误消息。之前它只有“任何CPU”。解决方案仍在运行,但在错误窗口中显示了多个此类错误消息。
我发现问题是在项目属性的“输出路径”现在指向"bin\x86\Debug"。这是配置管理器在添加操作时输入的。“任意CPU”平台的输出路径总是“;bin"(因为这个测试项目从来没有在发布模式下构建),所以配置管理器认为它应该添加"\x86\Debug"本身。从错误消息中没有任何迹象表明构建输出可能是原因,我仍然不明白项目是如何像这样运行的。将其设置为“;bin"在新的“x86”配置中,所有项目的错误都消失了。
问题出现时,我没有改变代码,使用最近的VS2019 16.7.5。
只要打开相应的XAML文件就可以解决这个问题。
我在WPF中遇到了类似的问题。我复制了一个用户控件,但忘记在its.xaml.cs文件中为它重命名公共ViewModel属性。但还是没用。我最终删除了项目的obj\debug类型文件夹中的所有文件(我们有不同的命名方式)。然后重建了它。它仍然不能工作,我退出了Visual Studio。(在此之前,我曾经使用过两个Visual Studio实例。)我遇到的问题是,当我已经修复它时,它报告了这个错误!当我回到Visual Studio(在删除了obj中的调试内容后),终于没有错误指示器了。然后我重建了项目,现在一切都很好!
这和我之前做的顺序不一样。它需要被简化。
我的方法是关闭解决方案并删除".vs"解决方案路径下的文件夹。 (它会让你失去所有的编辑器状态-打开的文件列表,窗口位置和错误的缓存)
它总是有效的。
OK this.InitializeComponent(); Wrong this.InitializeComponent;
当我试图构建一个针对net48的SDK项目时,这种情况发生在我身上。它在MSBuild.exe中工作得很好,但在给定错误时dotnet build失败。
MSBuild.exe
dotnet build
对我有用的是
<UseWPF>true</UseWPF>
<PropertyGroup/>
<Page />
现在msbuild和dotnet build都可以工作了。
msbuild
以下是完整的项目文件:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProjectGuid>{07465991-AC74-4C22-B1DE-7BA67A040631}</ProjectGuid> <OutputType>library</OutputType> <RootNamespace>MyRootNamespace</RootNamespace> <AssemblyName>MyAssemblyName</AssemblyName> <FileAlignment>512</FileAlignment> <PackagesDirectory>$(UserProfile)\.nuget\packages</PackagesDirectory> <ResolveNuGetPackages>true</ResolveNuGetPackages> <SkipValidatePackageReferences>true</SkipValidatePackageReferences> <TargetFramework>net48</TargetFramework> <TargetFrameworkProfile /> <TargetFrameworkVersion>v4.8</TargetFrameworkVersion> <IsNetCoreProject>false</IsNetCoreProject> <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <AutoGenerateBindingRedirect>true</AutoGenerateBindingRedirect> <ResolveAssemblyReferencesSilent>true</ResolveAssemblyReferencesSilent> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <UseWPF>true</UseWPF> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> <DebugType>embedded</DebugType> <Optimize>false</Optimize> <OutputPath>bin\</OutputPath> <DefineConstants>DEBUG;TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <DebugType>embedded</DebugType> <Optimize>true</Optimize> <OutputPath>bin\</OutputPath> <DefineConstants>TRACE</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Data" /> <Reference Include="System.Drawing" /> <Reference Include="System.Xml" /> <Reference Include="Microsoft.CSharp" /> <Reference Include="System.Core" /> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Net.Http" /> <Reference Include="System.Xaml" /> <Reference Include="WindowsBase" /> <Reference Include="PresentationCore" /> <Reference Include="PresentationFramework" /> </ItemGroup> </Project>
(老问题了,但如果搜索把你带到了这里)
01/09/2022 -在visual studio社区2022经历了问题。
报告的问题是一个未更改的.xaml.cs文件。
今天对我有效的解决方法是:
复制了我一直在做的最后一个xaml文件(和xaml.cs)到一个不在项目树中的文件夹。
在解决方案资源管理器中右键单击文件并选择“删除” (这将删除文件)
重新构建项目(在引用文件的地方会出现错误)
将xaml和xaml.cs文件复制回项目文件夹
右键单击项目,选择“添加/现有项目”并选择xaml文件。 重建项目
(对我来说,它构建和其他xaml文件上的错误已经消失了)
我在使用迁移向导将。net461项目迁移到新的sdk风格的csproj格式时遇到了这个问题。我必须把这个添加到我的csproj:
<PropertyGroup> <UseWPF>true</UseWPF>
然后删除从迁移向导生成的任何Page标记……
<Page Include="Views\MyCustomControl.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </Page>