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

时间:2011-08-03 11:15:27

标签: wpf visual-studio-2010 visual-studio initializecomponent

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

  

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

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

我创建了一个新项目,每当我编译项目时都会收到错误。我刚刚将项目发送给了一位同事,他刚编译时没有任何错误。

有什么问题?

46 个答案:

答案 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>

  1. 打开与违规的xaml.cs文件对应的XAML文件。
  2. 进行编辑 - 任何编辑,例如在某处添加空格
  3. 保存文件并关闭它
  4. 这种方法适合我。

答案 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)

  1. 导航至解决方案目录
  2. 删除\ obj文件夹
  3. 重建解决方案
  4. 我在重构期间遇到了这个错误,我重命名了一些文件/文件夹,并且需要重新生成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

Xaml file properties

Xaml Namespace Correcting 01

Xaml Namespace Correcting 02

答案 8 :(得分:13)

我已经有了这个(虽然这是我的错,并且是在我复制并粘贴了一些代码后引起的);当命名空间在XAML和后面的代码

之间不匹配时,可能会发生这种情况

EG

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

,背后的代码是

namespace NotDockPanel

答案 9 :(得分:13)

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

答案 10 :(得分:9)

上述答案都不适合我。我尝试了所有这些,除了重复的。但是出于一些奇怪的原因,这在我的Visual Studio 2015中的跨平台项目中起作用:

  1. 在解决方案资源管理器中右键单击导致问题的项目。在弹出菜单中选择:添加 - &gt;类
  2. 选择跨平台 - &gt;表格Xaml。保留漂亮的Page1.cs标准名称,然后单击“添加”。
  3. 注意以前的InitializeComponent() - 问题是如何因某种原因消失的。
  4. 删除新创建的Page1.cs并继续编程,就像Visual Studio工作正常一样。

答案 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)

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

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

  2. 然后您决定更改类的名称空间,因为您实际上只是使用文件夹来组织代码。 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;是(未设置)给我造成了这个错误。

"Startup object" (Not set)

答案 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值。有关此问题的说明是herehere。我想我会分享以防其他人遇到同样的问题。在这种情况下,仅更改命名空间是不够的。

答案 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()方法的错误。

顺便说一句,如果您想知道,从网络驱动器开发内容是不好的做法。当您尝试利用.NET的托管代码时,它尤其成问题;根据我的经验,每次你建立它都会吓坏。我忘了将这个小小的丢弃项目放在正确的文件夹中,最后付出了代价。

答案 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)

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

希望这也适合你。

答案 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 中的调试内容后),终于没有错误指示器了。然后我重建了项目,现在一切都很好!

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