![]() |
豁达的马克杯 · 本地启动关闭@Scheduled定时任务 ...· 6 月前 · |
![]() |
聪明伶俐的扁豆 · svg转成canvas - 掘金· 1 年前 · |
![]() |
知识渊博的手链 · 关于minio文件服务器的使用_minio文 ...· 1 年前 · |
![]() |
千杯不醉的红豆 · PostgreSQL ...· 1 年前 · |
![]() |
不羁的上铺 · Xamarin.Forms Local ...· 1 年前 · |
如果我在Visual Studio2010 SP1中创建一个新项目并选择"WPF Application“并尝试构建生成的应用程序,则会出现以下错误
名称'InitializeComponent‘在当前上下文中不存在。
今天早上,当我试图构建我当前的项目时,我得到了一个类似的错误。昨天,我编译和运行它没有任何问题。
我创建了一个新项目,每当我编译该项目时都会收到错误。我刚刚将项目发送给一位同事,他刚刚编译完成,没有任何错误。
怎么啦?
这有一个非常具体的原因,它在项目设置中。当您尝试将.NET控件/窗口添加到WPF2.0类库或项目时,通常会发生这种情况。出现此错误的原因是该项目不知道它正在生成C#控件或窗口,因此尝试将其作为WPF 2.0项目生成。
该解决方案涉及编辑.csproj文件。右键单击导致问题的项目,然后选择“卸载项目”。右键单击卸载的工程,选择“编辑.csproj”。.csproj文件将打开,您可以看到该文件。查找以下行:
<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中重命名时,我遇到了这个问题。
所以,检查一下你是否做过同样的事情。
命名空间 和 类 名称需要匹配,因为它们都是分部类的一部分
namespace ZZZ
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
//...
<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
这为我解决了问题。
我注释掉了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
}
当我不小心从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文件,注意到在默认的"ProjectTypeGuids“部分下没有"PropertyGroup”的记录,所以我添加了以下内容:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
这是WPF的项目GUID。然后我删除并重新添加了UserControl,它就开始工作了。我不确定我是否必须做最后一步,但现在它对我来说是有效的。
我发现"Startup object“是(没有设置)导致这个错误的原因。
当您从另一个项目导入类,或者更改xaml文件的路径,或者更改xaml文件或.cs文件后面的命名空间时,可能会出现此错误。
One: 它的名称空间可能与您的新项目中的名称空间不同
namespace TrainerB.MVC.Forms
public partial class AboutDeveloper : ContentPage
public AboutDeveloper()
InitializeComponent();
}
正如您所看到的,导入文件中的名称空间以旧项目名称 "TrainerB" 开头,但新项目可能具有不同的名称,因此只需在.xaml文件和后面的.cs文件中将其更改为正确的新项目名称即可。
2:
将.xaml文件的属性更改为:
生成操作: 嵌入式资源
自定义工具: MSBuild:UpdateDesignTimeXaml
由于这似乎是关于缺少'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
中定义资源的方式,所以我认为这是可行的。
然而,
Controls:MetroWindow
并非如此!在那里,我绝对需要如下的资源定义:
<Controls:MetroWindow.Resources>
<ResourceDictionary>
<prop:Resources x:Key="LocalizedStrings"/>
</ResourceDictionary>
</Controls:MetroWindow.Resources>
因此,总而言之,我的问题是缺少
<ResourceDictionary>
标记。我真的不知道为什么这会产生'InitializeComponent‘错误,奇怪的是,它甚至没有在我的每台机器上产生它,但这就是我修复它的方式。希望这能有所帮助(剩下的0.001%遇到这个问题的人)。
在这个线程中,最好的方法是使用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 & App.xaml.cs保留为缺省值后,尝试编译上面的代码会产生链接器错误。
幸运的是,当鼠标悬停在LabelControlAdvancedSample.xaml.cs中的InitializeComponent()语句上时,有一个链接的文本提示:
显示潜在的修复程序。
单击它将调用另一个链接的文本:
生成方法MainWindow.InitializeComponent。
这样做会产生以下“不做任何事情”的方法:
private void InitializeComponent()
throw new NotImplementedException();
}
必须为要构建的项目定义函数。看起来在WPF中的InitializeComponent实现与 VB.Net 有所不同。
xaml编辑: 第一行的namespace.class不正确。根据 MSDN 和@Sean B的 answer 的说法,它应该是
<Window x:Class="LabelControlAdvancedSample.MainWindow"
因此,项目编译时没有错误,并且不需要伪InitializeComponent方法,实际上它会生成更多的错误。去展示VS是有帮助的,即使在极其罕见的用户错误的情况下也是如此。:P
我在VS2017,Xamarin.Forms项目中也遇到了同样的问题。正在阅读此错误链接:
https://bugzilla.xamarin.com/show_bug.cgi?id=33181#c53
要解决本例中的问题:右键单击
[xaml-file-name].xaml
,选择
Properties
,然后将
Build Action
更改为
Content
,然后返回到
Embedded resource
。
其他选项:
在我使用Xamarin表单的情况下,除了我的App.xaml文件中的“InitializeComponent”不存在于当前上下文错误之外,我还在输出中注意到.csproj文件构建失败。真奇怪。
除了下面这两个ItemGroup条目之外,文件本身没有什么特别之处:
<ItemGroup>
<EmbeddedResource Remove="App.xaml" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml" />
</ItemGroup>
我从.csproj文件中删除了这两个文件,执行了清理和重建,错误最终消失了。如此痛苦地解决这个问题,也许这会帮助别人在未来的道路上避免一些压力。
在我的例子中(NET Core3.1),我通过在项目文件的
ProjectGroup
部分给它一个
AssemblyName
标签来修复它。例如:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
![]() |
聪明伶俐的扁豆 · svg转成canvas - 掘金 1 年前 |