如果我在Visual Studio 2010 SP1中创建一个新项目,并选择“WPF应用程序”,并尝试构建生成的应用程序,我会得到错误
名称“InitializeComponent”在当前上下文中不存在。
今天早上,当我试图构建当前项目时,我遇到了类似的错误。昨天,我编译和运行它没有问题。
我创建了一个新项目,每当我编译项目时,都会得到错误。我刚刚把项目发给了同事,他刚刚编译完成,没有任何错误。
怎么了?
如果我在Visual Studio 2010 SP1中创建一个新项目,并选择“WPF应用程序”,并尝试构建生成的应用程序,我会得到错误
名称“InitializeComponent”在当前上下文中不存在。
今天早上,当我试图构建当前项目时,我遇到了类似的错误。昨天,我编译和运行它没有问题。
我创建了一个新项目,每当我编译项目时,都会得到错误。我刚刚把项目发给了同事,他刚刚编译完成,没有任何错误。
怎么了?
当前回答
导致这个错误的另一个常见原因是:
Right click on folder in project to create new UserControl. This creates a class and xaml file that derives from user control in the namespace of the folder. Then you decide to change the namespace of the class because you're really just using folders for organization of code. The x:Class attribute will not get automatically updated so it will be searching for a class that doesn't exist. Could probably use a better error message like "x:Class type could not be found in namesace bla.blaa.blaaa."
其他回答
这有一个非常具体的原因,它在项目设置中。当您试图将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中。
所以检查一下你是否做了同样的事情。
名称空间和类名需要匹配,因为它们都是部分类的一部分
namespace ZZZ
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
//...
}
}
<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
因为这似乎是关于缺少'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中定义资源的方式,所以我认为这是可行的。
然而,《Controls:MetroWindow!》在那里,我绝对需要如下的资源定义:
<Controls:MetroWindow.Resources>
<ResourceDictionary>
<prop:Resources x:Key="LocalizedStrings"/>
...
</ResourceDictionary>
</Controls:MetroWindow.Resources>
总之,我的问题是缺少<ResourceDictionary>标记。我真的不知道为什么这会产生'InitializeComponent'错误,奇怪的是,它甚至没有在我的每台机器上产生它,但这就是我如何修复它。希望这对(剩下的0.001%遇到这个问题的人)有所帮助。
我有同样的问题,期望我把我的主窗口xaml和cs复制到一个新文件,然后把它们复制回原来的地方。在尝试编译WPF应用程序后,我得到了这个错误。
我修复这个错误的方法是重命名命名空间(from egNamespace -> egNamespaceNew),它再次工作。然后我将名称空间改回原来的名称空间。