Visual Studio 2010 SP1で新しいプロジェクトを作成して[WPFアプリケーション]を選択し、生成されたアプリケーションをビルドしようとすると、エラーが発生します。
'InitializeComponent'という名前は現在のコンテキストには存在しません。
今朝、自分の現在のプロジェクトをビルドしようとしたときにも、同様のエラーが発生しました。昨日、コンパイルと実行に問題はありませんでした。
新しいプロジェクトを作成し、そのプロジェクトをコンパイルするたびにエラーが発生しました。私はプロジェクトを同僚に送ったところですが、彼はエラーなしでコンパイルしました。
なにが問題ですか?
私はこれを数回遭遇し、何がそれを引き起こすのかを忘れ続けています。コードビハインドファイルで名前空間の名前を変更したがXAMLでは名前を変更しなかったときに、この問題に遭遇しました。
それで、あなたが同じことをしたかどうか確認してください。
名前空間とクラスは両方ともの一部であるため、一致する必要があります。部分クラス
namespace ZZZ
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
//...
}
}
<!-- XAML -->
<Window x:Class="ZZZ.MainWindow">
プロジェクト間でxamlファイルを移動する場合、.xamlファイルのBuild Actionも "Page"に設定する必要があります(少なくともVS 2010では)。
(VS2015では)デバッグモードでエラーがないが、doでリリースモードで指定されたエラーがある(それでもプロジェクトは正常に実行されます)、ここで試すのは簡単なことです:
この方法は私にとって役に立ちました。
これには非常に具体的な理由があり、それはプロジェクト設定にあります。これは通常、WPFコントロール/ウィンドウを.NET 2.0クラスライブラリまたはプロジェクトに追加しようとするたびに発生します。このエラーの原因は、プロジェクトがWPFコントロールまたはウィンドウを構築していることを認識していないため、C#2.0プロジェクトとして構築しようとしていることです。
解決策は、.csprojファイルを編集することです。問題の原因となっているプロジェクトを右クリックし、「プロジェクトのアンロード」を選択します。アンロードしたプロジェクトを右クリックして「Edit .csproj」を選択します。 .csprojファイルが開き、XMLを見ることができます。次の行を探してください。
<Import Project=…..
それはファイルの終わり近くにあり、あなたが持っている唯一の行はおそらく
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
これは、プロジェクトを.NET 2.0プロジェクトとしてビルドするようにVisual Studioに指示します。やりたいことは、これが実際にはWPFプロジェクトであることをVisual Studioに伝えることです。そこで、次の行を追加する必要があります。
<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" />
この行は、プロジェクトをWPFプロジェクトとしてビルドするようにVisual Studioに指示します。これで、.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">
これは元の質問に対する答えではないことがわかっています(thatsプロジェクトは別のマシン上で構築されているため)が、エラーメッセージは同じでした。
私はいくつかのファイル/フォルダの名前を変更し、既存の* .g.csファイルを再生成する必要があるリファクタリング中にこのエラーに遭遇しました。
Xamlファイルで確認してください
<Page x:Class="Project1.Page1" ...
'Project1'の名前と 'Page1'の名前を一致させる
別のプロジェクトからクラスをインポートしたとき、またはxamlファイルのパス、あるいはxamlまたは後ろの.csファイルの名前空間を変更したときに、このエラーが発生する可能性があります。
One:新しいプロジェクトにある名前空間とは異なる名前空間がある可能性があります
namespace TrainerB.MVC.Forms
{
public partial class AboutDeveloper : ContentPage
{
public AboutDeveloper()
{
InitializeComponent();
}
}
}
ご覧のように、インポートされたファイルの名前空間は古いプロジェクト名で始まります。 "TrainerB"ですが、新しいプロジェクトの名前は異なる場合があります。 .xamlファイルと後ろの.csファイルの両方で、新しいプロジェクト名を修正してください。
2つ:
.xamlファイルのプロパティを次のように変更します。
ビルドアクション:埋め込みリソース
カスタムツール:MSBuild:UpdateDesignTimeXaml
ユーザーコントロールの名前を変更しているときにこれに遭遇しました。私が修正した方法は、InitializeComponentをコメントアウトし、すべての名前が正しいことを確認し(xamlとコードビハインド)、プロジェクトをビルドし、InitializeComponentのコメントを外してから再度ビルドすることでした。この問題にはいくつかの原因/解決策があるように思えますが、このようにして解決しました。
私はこれを持っていました(しかし、それは私のせいで、コードをコピーして貼り付けた後に起こりました)。名前空間がXAMLと分離コードの間で一致しない場合に発生する可能性があります。
例えば
<UserControl x:Class="DockPanel.TreeView" />
そして背後にあるコードは
namespace NotDockPanel
上記の答えのどれも私のために働きませんでした。私はそれらを重複したものを除いてすべて試しました。ただし、奇妙な理由で、これはVisual Studio 2015のクロスプラットフォームプロジェクトで機能しました。
私は、名前空間が一致しなければならないという上記の答えに同意します。しかし、私はこのように名前空間が一致するところで問題を抱えていました。
修正するには、XAMLの名前空間をINCORRECTに変更し、保存してから、正しい名前に戻しました。ほら!
Designerファイルを確認してください。
私はこれと同じ問題を抱えていました。私の場合、原因はFileName.Designer.csのnamespace
が、FileNameで使用されている(正しい)namespace
と一致しなかったためです。 .cs.
FileName.Designer.csのnamespace
をFileName.csのものと一致するように変更すると、問題は直ちに解決されました。
ソリューション全体をアンロードしてから、再度ロードしてください。それからソリューションを再構築します。これで問題は解決しました。
Xamarinフォームを使用しているときにXAMLファイルを移動すると、ファイルの "ビルドアクション"が変更されます。 Xamarinフォームは "build action = Embedded Resource"を必要とします。
Visual Studioで「ビルドアクション」を適用します。
Select the XAML file -> Properties -> Build Action = Embedded Resource
このエラーのもう1つの一般的な原因は、あなたがこれで何かをした場合です。
プロジェクト内のフォルダを右クリックして新しいUserControlを作成します。これにより、フォルダの名前空間のユーザーコントロールから派生するクラスとxamlファイルが作成されます。
それから、コードの編成にフォルダを使用しているだけなので、クラスのネームスペースを変更することにします。 x:Class属性は自動的に更新されないので、存在しないクラスを検索します。 「x:クラス型がnamesace bla.blaa.blaaaに見つかりませんでした」のような、より良いエラーメッセージをおそらく使用することができます。
私は上のすべての提案を試みます。あなたも成功せずにしようとした場合、より簡単な方法を入手。 新しいpage.xamlを作成し、新しいクラスのコードをコピーして削除問題のあるXAMLクラスもっと時間をかけないでください。
この問題を解決するもう1つの方法は、XAMLのプロパティ - > Build ActionをEmbedded Resourceから他のものに変更し、保存してからEmbedded Resourceに戻すことです。エラーは消えます。
何らかのアクションの後、.csファイルの名前空間と.xamlファイルの名前空間は異なる場合があります(xamlではx:Class = "namespace.yourType"を探してください)。
同じになるように修正してください。
インターネット上でこれを見つける人のために。コンパイルがある場合は、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>
これで解決しました。
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
}
「スタートアップオブジェクト」が(設定されていない)このエラーの原因であることがわかりました。
これが 'InitializeComponent'の欠落に関する問題の解決策になると思われるので、ここに私の答えを含めます。
私もこの問題を抱えていて、私がここで見つけたすべてのことと、Googleが見つけることができる他のすべてのフォーラムで試したことがありますが、どれも私のために問題を解決しませんでした。 2時間すべてを試した後、私は私の設定で何が間違っていたのかをついに見つけました。
私たちのプロジェクトでは、 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%の人々がこの問題に遭遇しています)。
私はこれが異なった原因のために答えられたことを知っています、しかしこれは大ヒットの投稿であり、私はクラスライブラリで同じ問題に遭遇しました。この場合、それは私の名前空間の変更(この記事でここで回答)とコンパイラがWindowを再構築できなかったことの両方が判明した。 InitializeComponent()メソッドを定義するgics。クラスライブラリのcsprojファイルにWPFプロジェクトのProjectTypeGuid値が欠落していたためです。そのための説明は ここ と ここ です。他の誰かが同じ問題に遭遇した場合に備えて私は共有すると思いました。この場合、名前空間を変更するだけでは不十分です。
これは、NugetパッケージのアンインストーラがApp.xamlの<Application>要素のすべての属性を削除したために起こりました。これには、アプリケーションクラス名を指定するx:Class属性が含まれていました。そのため、InitializeComponent()メソッドを含む部分クラスは生成されませんでした。
私はApp.xamlをソース管理コピーに戻すことで問題を解決しました。
名前空間が正しい場合は、同じエラーがあります。
アプリケーションを閉じてからもう一度開くだけです。
これであなたの問題は解決するかもしれません
それで私はこれがより古い質問であることを理解します、しかし我々は同様の問題を抱えていました。 VS2012を使用してプロジェクトをビルドすることはできましたが、コマンドラインからmsbuildを使用することはできませんでした。 .projファイルを調べたところ、デフォルトの "PropertyGroup"セクションに "ProjectTypeGuids"のレコードがないことに気付いたので、これを追加しました。
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
これはWPFのプロジェクトGUIDです。その後、UserControlを削除して再度追加したところ、動作し始めました。最後のステップを実行しなければならないかどうかはわかりませんが、それは今のところうまくいきます。
プロジェクト間で.xamlとその.csをコピーした後の何らかの理由で、ビルドアクションが変わることがあります。あなたの.xamlのビルドアクションがPageであることを確認してください。
私の場合、私のプロジェクト内に間違った参照がありましたが報告されていませんでした。
たとえそれらが正しいと意図されていたとしても、私はすべての私の参照を読むことで私の問題を解決しました。
私はちょうどこの問題に遭遇しました、そしてそれは私のプロジェクトがネットワーク上に保存されている私のユーザーフォルダに保存されていることであることが判明しました、そして我々は瞬間的なネットワーク機能停止をしました。私はビルドしました。それは私のファイルがエディタの外部で変更されたことを訴え(ファイルロックは壊されたばかりだった)、そしてうまく構築され、InitializeComponent()
メソッドに関するエラーを取り除きました。
ところで、ご参考までに、ネットワークドライブから何かを開発することはお勧めできません。 .NETのマネージコードを利用しようとしているときは特に問題になります。私の経験では、ビルドするたびにそれはおかしくなります。私はこの小さな使い捨てのプロジェクトを適切なフォルダに入れることを忘れ、そして結局代金を払うことになりました。
もう1つの考えられる説明は、あなたがx86に対して構築しているということです。ソリューションを右クリックして[構成マネージャ]を選択します。 Any CPUではなくx86に対して構築しているかどうかを確認してください。
このスレッドの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のInitializeComponentの実装が VB.Net に異なる点があります。
編集:xamlの最初の行のnamespace.classが正しくありません。 MSDN と@Sean Bの answer に従うと、
<Window x:Class="LabelControlAdvancedSample.MainWindow"
したがって、プロジェクトはエラーなしでコンパイルされ、ダミーのInitializeComponentメソッドは必要ありません。実際には、エラーがさらに発生します。非常にまれにユーザーエラーが発生した場合でも、VSを表示すると役立ちます。 :P
この問題は、 "WPFアプリケーションプロジェクト"を作成した後、そのビルドターゲットを "クラスライブラリ"に変更して別のプログラムで外部ツールとして使用するときに発生しました。
私は自分のウィンドウのビルドアクションが "Page"に設定されているように私のウィンドウのすべての私の.xamlファイルを変更しました。私が気付いていなかったのは、プロジェクトに "App.xaml"と "App.xaml.cs"も含まれていたということです。
"App.xaml"も "Page"に設定するか、( "App.xaml.cs"と共に)完全に削除する必要があります。私は前者をやった、それから私はファイルが役に立たないことに気づいたので後者をやった。
私はVS2017、Xamarin.Formsプロジェクトで同じ問題を抱えていました。このバグリンクを読む:
https://bugzilla.xamarin.com/show_bug.cgi?id=33181#c53
この場合の問題を解決するには、[xaml-file-name].xaml
を右クリックしてProperties
を選び、Build Action
をContent
に変更してからEmbedded resource
に戻します。
私の場合、プログラムのインスタンスは既にバックグラウンドで実行されていました。実行中のインスタンスを停止するだけで、プログラムは正常に構築されました。
プロジェクト内のフォルダを右クリックして、問題になっていた新しいUserControlを作成します。私はフォルダの外側に同じコントロールを作成し、それはそれでした。
私は同じ問題を抱えていました、私が私のMainWindow xamlとcsを新しいファイルにコピーして、そしてそれらを元の場所にコピーして戻すことを期待しています。私はそれからWPFアプリをコンパイルしようとした後にこのエラーを得ました。
私はこのエラーを修正するために名前空間の名前を変更しました(egNamespace - > egNamespaceNewから、そしてそれは再び動作しました。それから私は名前空間を元の名前に戻しました)。
私は同じ問題を抱えていました、しかし私の場合、これのどれも助けになりませんでした。私の状況では、私が持っていたすべてのWPFプロジェクト(新しく作られたプロジェクトを含む)は、このエラーでコンパイルを中止しました。最終的に私はすべての.Netフレームワークをアンインストールし、それからそれらを再インストールしました、そして物事は再び働き始めました。私はまたVisual Studioの再インストールをしました、しかしそれは何の影響も及ぼさないことが判明しました。
私は同じ問題を抱えていた、私は自分の共有プロジェクトを移植可能なクラスライブラリに変換しなければならなかった。
そう、たくさんのことができる...私はこれを追加するだろう... App.xamlがあなたの名前空間(あなたのアプリファイルがある場所)を指すようにしてください。 x:Class = "DX.App" <===これはAppであり、メインページの名前ではないことを確認してください
これがあなたにとってもうまくいくことを願っています。