WPFアプリケーションがあります。
App.xamlファイルのStartupUri属性で設定された、MainWindow.xamlでアプリを実行したときに開くページ。このページは正常に開きます。
ただし、ShowまたはShowDialogメソッドを使用して他のウィンドウを開こうとすると、InitializeComponentメソッドで「リソース 'Window1.xaml'が見つかりません」と呼ばれるIOExceptionを取得します(またはファイルが呼び出されます)。これは、作成するすべてのウィンドウで発生します。私はオンラインで検索しましたが、すべてのソリューションは「App.xamlのStartupUri属性が正しいことを確認してください」と言っているようです。
何が起こっているのでしょうか?
上記はうまくいきませんでしたが、うまくいったのは次のとおりです。 App.xaml
<Application x:Class="dotDiff2013.App"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
次に、起動URIを完全修飾URIに変更する必要があります。私の場合、MainWindow.xaml
を「Main」というフォルダーに変更するため、上記のURIを
StartupUri="Main/MainWindow.xaml"
私の問題を解決しました。
プロジェクト設定の「AssemblyName」と「Default Namespace」の値が同じ場合、この問題が発生しました。 AssemblyNameを別の名前に変更すると、問題は解決しました。
同じ問題がありました。 App.xamlを調整せずにMainWindow.xamlを移動したためです。たとえばMainWindow.xamlを「UI」というフォルダに移動する場合、App.xamlの次の行を調整する必要があります
StartupUri="UI/Mainwindow.xaml"
Window1.xamlファイル(つまり、Window1.xaml.cs)のコードビハインドを開く場合、InitializeComponentメソッド呼び出しを右クリックして、[Goto Definition]を選択できます。次のようなコードがあります。
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/TestApp;component/mainwindow.xaml", System.UriKind.Relative);
#line 1 "..\..\..\MainWindow.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
上記のコードのUriが正しくない場合、そのエラーが表示されます。
さらに、XAMLファイルのビルドアクションが「ページ」に設定されていない場合、その問題も発生します。これを確認するには、ソリューションエクスプローラーでファイルを選択し、F4を押します。
最後に、ビルドプロセスの一部として何かがXAMLファイルの名前を変更している場合(難読化など)、再びそのエラーを受け取ります。
それ以外は、「Clean Solution」と「Rebuild Solution」を試して、InitializeComponent定義のファイルが再構築されるようにします。
<Application x:Class="RuleSetEditor.App"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
StartupUri="/Forms/RuleEditor.xaml">
<Application.Resources>
</Application.Resources>
</Application>
ここで/ Forms /は私のプロジェクトのフォルダー構造です。これがapp.xamlに記載されていることを確認してください
このIOException
は、アセンブリ名のあいまいさが原因である可能性があります。たとえば、アセンブリにmyproduct.dll
という名前を付け、WPFアプリmyproduct.exeでアセンブリへの参照を追加しました。これにより、mainwindow.xaml
のIOException
が得られました。
チェックイン App.xaml
StartupUri
タグ(MainWindow
を移動した場合)。
ここで私の分析を参照してください。説明、発生していること、回避策もあります: http://connect.Microsoft.com/VisualStudio/feedback/details/759432 ( " 「リソースapp.xamlが見つかりません」クラッシュの分析(WPFプロジェクト))
また、app.xaml.csでOnStartup(StartupEventArgs e)
をオーバーライドする場合は、app.xamlからStartUri="mainwindow.xaml"
行も削除する必要があります。そうしないと、この場合も「リソース 'MainWindow1.xaml'が見つかりません」と表示されます。
私が同じ問題を抱えていたとしても、最初はInitializeComponent();
を指している問題を掘り下げました。ついに、Resources.resx
ファイルの内容ですが、アプリケーションフォルダーでは更新しませんでした。そのため、後で新しいresxファイルをコピーして試してみました。今では正常に動作します。
この問題が発生した場合に備えて、誰でもこれを一度見てください。
同じ問題ですが、さらに別の解決策:
私にとって、アセンブリ名とデフォルトの名前空間は同じでしたただし、プロジェクト名とは異なります。実際に、デフォルトのネームスペースとアセンブリ名を新しいプロジェクト名と一致するように更新し、修正しました。
誤ってファイルを移動していないことを確認してくださいMainWindow.xaml
鉱山が何らかの理由でViews
に誤ってドラッグされた-おっと
アプリケーションをローカライズした後、この問題に気付きました。インストーラスクリプトに含まれていないサテライトリソースになりました。そのため、Visual Studioで機能している間、インストーラーを個別にビルドするとこの問題が発生しました。
サテライトdllを含めるとうまくいきました。
ファイルを見つけますapp.g.cs
そしてメモ帳で編集します。VisualStudioでファイルをリロードするように求められます。[OK]をクリックします