web-dev-qa-db-ja.com

WPF IOExceptionリソースを見つけることができません

WPFアプリケーションがあります。

App.xamlファイルのStartupUri属性で設定された、MainWindow.xamlでアプリを実行したときに開くページ。このページは正常に開きます。

ただし、ShowまたはShowDialogメソッドを使用して他のウィンドウを開こうとすると、InitializeComponentメソッドで「リソース 'Window1.xaml'が見つかりません」と呼ばれるIOExceptionを取得します(またはファイルが呼び出されます)。これは、作成するすべてのウィンドウで発生します。私はオンラインで検索しましたが、すべてのソリューションは「App.xamlのStartupUri属性が正しいことを確認してください」と言っているようです。

何が起こっているのでしょうか?

48
lace.john

上記はうまくいきませんでしたが、うまくいったのは次のとおりです。 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"

私の問題を解決しました。

63
MoonKnight

プロジェクト設定の「AssemblyName」と「Default Namespace」の値が同じ場合、この問題が発生しました。 AssemblyNameを別の名前に変更すると、問題は解決しました。

12
Dennie

同じ問題がありました。 App.xamlを調整せずにMainWindow.xamlを移動したためです。たとえばMainWindow.xamlを「UI」というフォルダに移動する場合、App.xamlの次の行を調整する必要があります

         StartupUri="UI/Mainwindow.xaml"
9
gosua

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定義のファイルが再構築されるようにします。

9
CodeNaked
<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に記載されていることを確認してください

3
dotnetavalanche

このIOExceptionは、アセンブリ名のあいまいさが原因である可能性があります。たとえば、アセンブリにmyproduct.dllという名前を付け、WPFアプリmyproduct.exeでアセンブリへの参照を追加しました。これにより、mainwindow.xamlIOExceptionが得られました。

2
user1130316

チェックイン App.xamlStartupUriタグ(MainWindowを移動した場合)。

1
user1579553

ここで私の分析を参照してください。説明、発生していること、回避策もあります: http://connect.Microsoft.com/VisualStudio/feedback/details/759432 ( " 「リソースapp.xamlが見つかりません」クラッシュの分析(WPFプロジェクト))

1
lexapilot

また、app.xaml.csでOnStartup(StartupEventArgs e)をオーバーライドする場合は、app.xamlからStartUri="mainwindow.xaml"行も削除する必要があります。そうしないと、この場合も「リソース 'MainWindow1.xaml'が見つかりません」と表示されます。

1
atprof

この問題を解決するには、App.Xamlにアクセスして、アプリケーションの実行時に実行するStsrtUpUriを変更してください。 enter image description here

スタートアップUriの変更 enter image description here

Xamlがフォルダー内にある場合は、次のように追加できます

StartupUri = "View/MyView.xaml"

1
Debendra Dash

私が同じ問題を抱えていたとしても、最初はInitializeComponent();を指している問題を掘り下げました。ついに、Resources.resxファイルの内容ですが、アプリケーションフォルダーでは更新しませんでした。そのため、後で新しいresxファイルをコピーして試してみました。今では正常に動作します。

この問題が発生した場合に備えて、誰でもこれを一度見てください。

1
Sujith H S

同じ問題ですが、さらに別の解決策:

私にとって、アセンブリ名とデフォルトの名前空間は同じでしたただし、プロジェクト名とは異なります。実際に、デフォルトのネームスペースとアセンブリ名を新しいプロジェクト名と一致するように更新し、修正しました。

0
joshcomley

誤ってファイルを移動していないことを確認してくださいMainWindow.xaml鉱山が何らかの理由でViewsに誤ってドラッグされた-おっと

0
Simon_Weaver

アプリケーションをローカライズした後、この問題に気付きました。インストーラスクリプトに含まれていないサテライトリソースになりました。そのため、Visual Studioで機能している間、インストーラーを個別にビルドするとこの問題が発生しました。

サテライトdllを含めるとうまくいきました。

0
Charlie Salts

ファイルを見つけますapp.g.csそしてメモ帳で編集します。VisualStudioでファイルをリロードするように求められます。[OK]をクリックします

0
killo9ramm