442

如果我在 Visual Studio 2010 SP1 中创建一个新项目并选择“WPF 应用程序”并尝试构建生成的应用程序,我会收到错误消息

当前上下文中不存在名称“InitializeComponent”。

今天早上我尝试构建当前项目时遇到了类似的错误。昨天,我编译和运行它没有问题。

我创建了一个新项目,每次编译项目时都会出错。我刚刚把项目发给了一位同事,他刚刚编译,没有任何错误。

怎么了?

4

47 回答 47

832

我遇到过几次,一直忘记是什么原因造成的。当我在我的代码隐藏文件中重命名命名空间但不在我的 XAML 中时,我遇到了这个问题。

所以检查你是否做了同样的事情。

命名空间名需要匹配,因为它们都是部分类的一部分

namespace ZZZ
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
         //...
    }
}

<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
于 2011-10-11T17:28:59.093 回答
268

.xaml 文件的构建操作也必须设置为“页面”,在项目之间移动 xaml 文件时,此设置会丢失(至少在 VS 2010 中)。

于 2011-11-17T16:16:18.663 回答
146

对于那些在 Debug 模式下没有错误,但在 Release 模式下确实有指定错误(但项目运行良好)的人,这里有一些简单的尝试:

  1. 打开与有问题的 xaml.cs 文件对应的 XAML 文件。
  2. 进行编辑——任何编辑,例如在某处添加空间
  3. 保存文件并关闭它

这种方法在 VS 2015 中对我有用,根据其他用户的说法,也适用于 2017 年和 2019 年

于 2015-10-14T16:14:19.917 回答
40
  1. 导航到解决方案目录
  2. 删除 \obj 文件夹
  3. 重建解决方案

我在重构过程中遇到了这个错误,我重命名了一些文件/文件夹,并且需要重新生成预先存在的 *.g.cs 文件。

于 2013-04-05T20:02:35.567 回答
27

这有一个非常具体的原因,它在项目设置中。每当您尝试将 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 文件,在解决方案资源管理器中右键单击它并选择“重新加载项目”编译,就是这样,你就完成了!

于 2011-08-03T11:20:42.050 回答
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">

我知道这不是原始问题的答案(因为那个项目是在另一台机器上构建的),但是错误消息是一样的,所以也许我会帮助解决这种情况的人。

于 2014-03-16T14:16:46.137 回答
19

当您从另一个项目导入一个类,或者更改 xaml 文件的路径,或者 xaml 或后面的 .cs 文件的命名空间时,您可能会收到此错误。

一:它的命名空间可能与您在新项目中的命名空间不同

namespace TrainerB.MVC.Forms
{
     public partial class AboutDeveloper : ContentPage
     {
          public AboutDeveloper()
          {
               InitializeComponent();
          }
     }
}

如您所见,导入文件中的名称空间以旧项目名称开头:"TrainerB",但您的新项目可能有不同的名称,因此只需在 .xaml 文件和 .xaml 文件中将其更改为正确的新项目名称后面的 .cs 文件。

二:

将 .xaml 文件的属性更改为:

构建操作:嵌入式资源

自定义工具: MSBuild:UpdateDesignTimeXaml

Xaml 文件属性

Xaml 命名空间更正 01

Xaml 命名空间更正 02

于 2016-05-15T22:07:16.870 回答
18

检查设计器文件。

我有同样的问题。就我而言,原因是namespacefor FileName.Designer.cs与FileName.csnamespace中使用的(正确)不匹配。

更改FileName.Designer.csnamespace以匹配FileName.cs立即解决了问题。

于 2018-11-22T15:42:16.797 回答
16

我遇到过这个(尽管这在很大程度上是我的错,并且是在我复制并粘贴了一些代码之后引起的);当命名空间在 XAML 和后面的代码之间不匹配时,可能会发生这种情况

例如

<UserControl x:Class="DockPanel.TreeView" />

后面的代码是

namespace NotDockPanel
于 2013-08-29T11:29:38.480 回答
13

我在重命名用户控件时遇到了这个问题。我修复它的方法是注释掉 InitializeComponent,验证所有名称是否正确(xaml 和后面的代码),构建项目,取消注释 InitializeComponent,然后再次构建。听起来这个问题可能有几个原因/解决方案,但这种方式为我做到了。

于 2012-02-15T15:57:20.957 回答
13

以上答案都不适合我。除了重复的,我都试过了。但是由于某些奇怪的原因,这在我的 Visual Studio 2015 中的跨平台项目中起作用:

  1. 在解决方案资源管理器中右键单击导致问题的项目。在弹出菜单中选择:添加 --> 类
  2. 选择跨平台 --> Forms Xaml Page。保留漂亮的 Page1.cs 标准名称,然后单击添加。
  3. 请注意之前的 InitializeComponent() 问题是如何因某种原因而消失的。
  4. 删除新创建的 Page1.cs 并继续编程,就像 Visual Studio 工作正常一样。
于 2016-09-14T21:55:33.303 回答
9

卸载整个解决方案,然后重新加载。然后重建解决方案。这为我解决了这个问题。

于 2017-06-02T14:39:03.143 回答
9

我同意上面的答案,即名称空间必须匹配。但是,我在命名空间匹配的地方遇到了这样的问题。

为了解决这个问题,我只是将 XAML 中的命名空间更改为不正确的名称,保存,然后将其更改回正确的名称。瞧!

于 2016-04-15T17:06:19.600 回答
8

如果您使用 Xamarin Forms 并移动 XAML 文件,则文件的“构建操作”会更改。Xamarin Forms 需要“构建操作 = 嵌入式资源”。

在 Visual Studio 中应用“构建操作”:

Select the XAML file -> Properties -> Build Action = Embedded Resource

于 2017-08-02T08:49:42.700 回答
8

对我有帮助的 - 是将 .csproj 中的第一行更改为

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
于 2020-02-19T17:37:47.970 回答
8

我尝试了上面的所有建议。如果您也尝试但没有成功,请获得更简单的方法。创建一个新的 page.xaml,然后复制新类的代码并删除有问题的类 XAML。不要花更多的时间。

于 2017-04-03T02:22:44.357 回答
6

此错误的另一个常见原因是如果您在此执行了某些操作:

  1. 右键单击项目中的文件夹以创建新的 UserControl。这将创建从文件夹命名空间中的用户控件派生的类和 xaml 文件。

  2. 然后您决定更改类的名称空间,因为您实际上只是使用文件夹来组织代码。x:Class 属性不会自动更新,因此它将搜索一个不存在的类。可能会使用更好的错误消息,例如“x:Class type could not be found in namesace bla.blaa.blaaa.”

于 2013-08-09T13:56:17.467 回答
6

此问题的另一个解决方案是简单地将 XAML 上的属性-> 构建操作从嵌入式资源更改为其他任何内容,保存,然后将其更改回嵌入式资源。错误消失。

于 2016-08-09T18:49:59.200 回答
5

如果命名空间是正确的,那么也会有同样的错误,

只需关闭您的应用程序并再次打开它

这可能会解决您的问题

于 2015-09-17T08:37:05.440 回答
4

这发生在我身上,因为 Nuget 包卸载程序清除了 App.xaml 中 <Application> 元素上的所有属性。这包括 x:Class 属性,它指定应用程序类名称。因此,从未生成包含 InitializeComponent() 方法的分部类。

我通过将 App.xaml 还原为源代码控制副本解决了这个问题。

于 2012-02-04T03:24:35.090 回答
4

我知道这是由于不同的原因而得到回答的,但这是一个非常热门的帖子,我在类库中遇到了同样的问题。在这种情况下,结果是我的命名空间发生了变化(在这篇文章中回答,并且编译器无法重建定义 InitializeComponent() 方法的 Window.gics。不能,因为类库缺少 csproj 文件中 WPF 项目的 ProjectTypeGuid 值。这方面的说明在这里这里。我想我会分享以防其他人遇到同样的问题。在这种情况下,仅更改命名空间是不够的。

于 2018-03-29T14:42:54.163 回答
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>

评论 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
}
于 2012-06-19T15:17:48.660 回答
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>
于 2015-08-04T08:12:41.997 回答
3

由于这似乎是有关缺少“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% 的人遇到此问题)。

于 2016-11-29T14:59:24.747 回答
3

我发现“启动对象”是(未设置)对我造成此错误。

“启动对象”(未设置)

于 2016-03-18T17:31:49.817 回答
3

这个问题发生在我创建“WPF 应用程序项目”然后将其构建目标更改为“类库”以被另一个程序用作外部工具时。

我为我的 Windows 更改了所有 .xaml 文件,因此它们的构建操作设置为“页面”。我没有意识到该项目还包含“App.xaml”和“App.xaml.cs”。

“App.xaml”也需要设置为“Page”,或者完全删除(连同“App.xaml.cs”)。我做了前者,然后是后者,因为我意识到这些文件没用。

于 2016-04-28T17:27:52.893 回答
3

在某些操作之后,.cs 文件的命名空间和 .xaml 文件中的命名空间可能不同(在 xaml 中查找 x:Class="namespace.yourType")。

将它们修复为相同。

于 2015-12-14T10:23:36.657 回答
2

所以我意识到这是一个较老的问题,但我们遇到了类似的问题。我们能够使用 VS2012 构建项目,但不能从命令行使用 msbuild。我进入 .proj 文件并注意到它在默认的“PropertyGroup”部分下没有“ProjectTypeGuids”的记录,所以我添加了这个:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

这是 WPF 的项目 GUID。然后我删除并重新添加了 UserControl 并开始工作。我不确定我是否必须做最后一步,但它现在对我有用。

于 2015-04-27T22:41:19.487 回答
2

刚遇到这个问题,原来是我的项目存放在我的用户文件夹中,这个文件夹存放在网络上,我们出现了瞬间网络中断。我做了一个构建;它抱怨我的文件已在编辑器之外被修改(他们没有;文件锁刚刚被破坏),它构建得很好,消除了有关该InitializeComponent()方法的错误。

顺便说一句,如果您想知道,从网络驱动器开发某些东西是不好的做法。当您尝试利用 .NET 的托管代码时,它变得特别成问题。根据我的经验,每次构建时它都会吓坏。我忘了把这个一次性的小项目放在正确的文件夹中,最终付出了代价。

于 2015-06-18T22:59:56.453 回答
2

在这个线程中,最好的 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 中InitializeComponentVB.Net的实现有所不同。
编辑:xaml 第一行中的 namespace.class 不正确。根据MSDN和@Sean B 的回答,应该是

<Window x:Class="LabelControlAdvancedSample.MainWindow"

因此项目编译没有错误,并且不需要虚拟 InitializeComponent 方法,实际上它会产生更多错误。去展示 VS 可能会有所帮助,即使在极少数的用户错误情况下也是如此。:P

于 2017-12-30T04:31:48.890 回答
2

由于某些原因,在复制 .xaml 和项目之间的 .cs 之后,构建操作有时会发生变化。请确保您的 .xaml 的构建操作是 Page。

于 2016-01-05T20:49:43.497 回答
2

我在 VS2017,Xamarin.Forms 项目中遇到了同样的问题。阅读此错误链接:

https://bugzilla.xamarin.com/show_bug.cgi?id=33181#c53

要解决这种情况下的问题:右键单击[xaml-file-name].xaml,选择Properties,然后将 更改为Build ActionContent然后返回Embedded resource

于 2018-11-16T17:32:03.707 回答
2

另一种可能的解释是您正在针对 x86 构建。右键单击您的解决方案并选择配置管理器。看看你是不是针对 x86 而不是 Any CPU 构建的。

于 2015-10-01T12:58:06.543 回答
2

在我的情况下,我的项目中有一个参考是错误的,但没有报告。

我通过阅读所有参考资料解决了我的问题,即使它们的意思是正确的。

于 2016-01-13T09:42:00.277 回答
1

我遇到了同样的问题,希望我将 MainWindow xaml 和 cs 处理到一个新文件中,然后将它们复制回原来的位置。然后在尝试编译 WPF 应用程序后出现此错误。

我为解决此错误所做的工作是重命名命名空间(从 egNamespace -> egNamespaceNew,它再次起作用。然后我将命名空间改回原来的命名空间。

于 2013-12-23T03:11:30.043 回答
1

右键单击项目中的文件夹以创建新的 UserControl,这对我来说是个问题。我在文件夹外创建了相同的控件,就是这样。

于 2015-03-01T17:43:40.157 回答
1

我在 WPF 中遇到了类似的问题。我复制了一个用户控件,但忘记在其.xaml.cs 文件中为它重命名公共 ViewModel 属性。但仍然没有工作。我最终删除了项目的 obj\debug 类型文件夹中的所有文件(我们的命名不同)。并重建它。它仍然无法正常工作,我退出了 Visual Studio。(在此之前,我曾经有过两个 Visual Studio 实例,我想可能是。)我遇到的问题是它报告它有这个错误,而我已经修复了它!当我回到 Visual Studio 时(删除 obj 中的调试内容后),终于没有错误指示器了。然后我重建了项目,现在一切都很好!

这不是我在这里做事的确切顺序。它需要被简化。

于 2021-07-23T22:22:48.627 回答
1

在我的情况下,程序实例已经在后台运行。我只是停止正在运行的实例并成功构建程序。

于 2018-11-20T08:45:47.663 回答
1

附加选项:

在我使用 Xamarin Forms 的情况下,除了在我的 App.xaml 文件中的当前上下文错误中不存在“InitializeComponent”之外,我还在输出中注意到 .csproj 文件无法构建。诡异的。

除了这两个 ItemGroup 条目之外,文件本身中没有任何东西对我来说很突出:

  <ItemGroup>
    <EmbeddedResource Remove="App.xaml" />
  </ItemGroup>

  <ItemGroup>
    <ApplicationDefinition Include="App.xaml" />
  </ItemGroup>

我从 .csproj 文件中删除了这两个文件,执行了清理和重建,错误终于消失了。解决这个问题是如此痛苦,也许这会帮助其他人避免一些压力。

于 2020-04-24T22:54:29.783 回答
1

在我的情况下(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 看到控件的问题。

于 2020-07-10T22:23:36.687 回答
0

我遇到了同样的问题,但就我而言,这些都没有帮助。在我的情况下,我拥有的每个 WPF 项目(包括新创建的项目)都停止编译并出现此错误。最终,我卸载了所有的 .Net 框架,然后重新安装了它们,一切又开始工作了。我还重新安装了 Visual Studio,但结果没有任何影响。

于 2013-07-05T12:48:31.033 回答
0

我有同样的问题,我必须将我的共享项目转换为可移植类库。

于 2014-06-25T17:54:02.760 回答
0

是的,有很多事情可以......我会添加这个......确保 App.xaml 指向您的命名空间(您的应用程序文件所在的位置)+ .App 例如。x:Class="DX.App" <=== 确保这是 App 而不是主页名称

希望这对你也有效。

于 2013-04-10T16:49:29.147 回答
0
OK     this.InitializeComponent(); 

Wrong  this.InitializeComponent;
于 2022-02-15T20:33:41.490 回答
0

在将新平台“x86”添加到解决方案配置管理器后,我也收到了此错误消息。之前它只有“任何 CPU”。该解决方案仍在运行,但在错误窗口中显示了多个这些错误消息。

我发现问题是在项目属性中,“输出路径”现在指向“bin\x86\Debug”。这是配置管理器在添加操作中放入的。'Any CPU' 平台的输出路径总是只是“bin”(因为这个测试项目从未在发布模式下构建),所以配置管理器认为它应该自己添加“\x86\Debug”。错误消息中没有任何迹象表明构建输出可能是原因,我仍然不明白该项目是如何运行的。在将新的“x86”配置中的所有项目设置为“bin”后,所有错误都消失了。

于 2020-08-23T10:21:11.483 回答
0

我的方法是关闭解决方案并删除解决方案路径下的“.vs”文件夹。
(它会让你失去所有的编辑器状态——打开的文件列表、窗口位置和错误缓存

它总是有效的。

于 2021-10-13T08:53:04.340 回答
0

问题出现了,而我没有使用最近的 VS2019 16.7.5 更改代码。

只需打开编辑相应的 XAML 文件即可解决问题。

于 2020-10-11T15:12:50.170 回答