如果我在Visual Studio 2010 SP1中创建一个新项目并选择“ WPF应用程序”并尝试生成生成的应用程序,则会收到错误消息
名称“ InitializeComponent”在当前上下文中不存在。
今天早晨,当我尝试构建当前项目时,我遇到了类似的错误。昨天,我编译并运行它没有问题。
我创建了一个新项目,并且每次编译项目时都会收到错误消息。我刚刚将项目发送给了一位同事,他的编译没有任何错误。
怎么了?
如果我在Visual Studio 2010 SP1中创建一个新项目并选择“ WPF应用程序”并尝试生成生成的应用程序,则会收到错误消息
名称“ InitializeComponent”在当前上下文中不存在。
今天早晨,当我尝试构建当前项目时,我遇到了类似的错误。昨天,我编译并运行它没有问题。
我创建了一个新项目,并且每次编译项目时都会收到错误消息。我刚刚将项目发送给了一位同事,他的编译没有任何错误。
怎么了?
Answers:
我已经遇到过几次了,一直忘了是什么原因造成的。当我在文件后面的代码中重命名命名空间时遇到了这个问题,而在XAML中却没有。
因此,请检查您是否已完成相同的操作。
该命名空间和类名需要匹配,因为它们是一个局部类的两个组成部分
namespace ZZZ
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
//...
}
}
<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
.xaml文件的“生成操作”也必须设置为“页面”,在项目之间移动xaml文件时,此设置会丢失(至少在VS 2010中)。
对于那些在“调试”模式下没有错误,但在“发布”模式下确实存在指定的错误(但项目运行正常)的人,可以尝试以下简单方法:
此方法在VS 2015中对我有用,并且根据其他用户,2017和2019年也是如此
在重构期间,我重命名了一些文件/文件夹,并且需要重新生成之前存在的* .g.cs文件,我在遇到此错误。
x:Class
与匹配后,执行此操作Namespace.Class
。
这有一个非常具体的原因,它在项目设置中。每当您尝试将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”编译,就这样,一切就完成了!
当我不小心从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文件和后面的.cs文件。
二:
将.xaml文件的属性更改为:
构建动作:嵌入式资源
自定义工具: MSBuild:UpdateDesignTimeXaml
xaml
文件的属性。+1
上面的答案对我都不起作用。除了重复的,我都尝试过。但是出于某些奇怪的原因,这在我的Visual Studio 2015跨平台项目中起作用:
我同意上述答案,即名称空间必须匹配。但是,我遇到了一个这样的问题,即名称空间匹配。
为了解决这个问题,我只是简单地将XAML中的命名空间更改为INCORRECT,保存,然后将其更改为正确的。瞧!
我尝试以上所有建议。如果您尝试也没有成功,那就获得更简单的方法。创建一个新的page.xaml,然后复制新类的代码并删除有问题的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>
重新注释此错误以修复构建错误。
<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>
<DependentUpon>YourFile.xaml</DependentUpon>
由于某种原因我错过了,而这正是我修复的原因!
如果命名空间正确,则也会出现相同的错误,
只需关闭您的应用程序,然后再次打开。
这可以解决您的问题
进行一些操作后,.cs文件的名称空间和.xaml文件中的名称空间可能会有所不同(在xaml中查找x:Class =“ namespace.yourType”)。
修复它们是相同的。
由于这似乎是解决有关缺少“ 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%的人遇到此问题)。
因此,我意识到这是一个较旧的问题,但是我们遇到了类似的问题。我们能够使用VS2012构建项目,但无法从命令行使用msbuild。我进入.proj文件,发现它在默认“ PropertyGroup”部分下没有“ ProjectTypeGuids”的记录,因此我添加了以下内容:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
这是WPF的项目GUID。然后,我删除并重新添加了UserControl,它开始工作。我不确定是否必须做最后一步,但是现在对我有用。
由于某些原因,在项目之间复制.xaml及其.cs后,构建操作有时会更改。请确保您的.xaml的构建操作是Page。