WPF IOException Cannot locate resource

j'ai une application WPF.

La page qui s'ouvre lorsque l'application s'exécute dans MainWindow.xaml, tel que défini dans L'attribut StartupUri de l'application.fichier xaml. Cette page s'ouvre très bien.

cependant, si j'essaie d'ouvrir d'autres fenêtres en utilisant la méthode Show ou ShowDialog, j'obtiens une IOException dans la méthode InitializeComponent disant "Cannot locate resource 'Window1.xaml" (ou quel que soit le fichier est appelé). Cela se produit avec chaque fenêtre que je crée. J'ai cherché en ligne, mais toutes les solutions semblent dire " assurez-vous l'attribut StartupUri de l'application.xaml est correct" et le mien est, donc ouverture de la fenêtre principale.

une idée de ce qui se passe?

42
demandé sur Kiquenet 2011-06-29 13:40:32

15 réponses

ce qui précède n'a pas fonctionné pour moi mais ce qui a fonctionné était comme suit. Ouvrir le 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>

vous devez alors changer L'URI de démarrage en URI pleinement qualifié. Dans mon cas, j'avais déplacé mon MainWindow.xaml vers un dossier appelé 'Main', donc changer L'URI ci-dessus en

StartupUri="Main/MainWindow.xaml"

Résolu mon problème.

49
répondu MoonKnight 2013-03-18 20:09:05

j'ai eu ce problème lorsque "AssemblyName" et "Default Namespace" sur les paramètres du projet avaient la même valeur. Changer le Nomd'assemblage en quelque chose d'autre a résolu le problème.

12
répondu Dennie 2012-04-05 08:14:04

j'ai eu le même problème. La raison pour moi parce que j'ai déplacé la fenêtre principale.xaml sans ajustement de L'application.XAML. Si vous déplacez votre MainWindow.xaml par exemple dans un dossier appelé "UI" vous devez ajuster la ligne suivante dans L'application.xaml

         StartupUri="UI/Mainwindow.xaml"
9
répondu gosua 2013-05-22 16:32:58

si vous ouvrez le code-derrière pour la fenêtre 1.fichier XAML (i.e. Window1.XAML.cs), vous pouvez faire un clic droit sur L'appel de méthode InitializeComponent et sélectionner "Goto Definition". Il y aura le code suivant:

/// <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
}

si L'Uri dans le code ci-dessus n'est pas correct, alors vous recevrez cette erreur que vous avez.

en outre, si L'action de compilation du fichier XAML n'est pas définie à "Page", alors vous aurez aussi ce problème. Pour vérifier cela, vous pouvez sélectionner fichier dans L'Explorateur de solutions et appuyez sur F4.

enfin, si quelque chose est en train de renommer le fichier XAML dans le cadre de votre processus de construction (comme l'obscurcissement), vous recevrez à nouveau cette erreur.

sinon, j'essaierais une "Solution propre" et une" solution de reconstruction " pour m'assurer que le fichier avec la définition du composant Initializec est reconstruit.

7
répondu CodeNaked 2011-06-29 11:39:30
<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>

ici /Formes/ est ma structure de dossier dans mon projet. Assurez-vous que cela est mentionné dans app.xaml

3
répondu dotnetavalanche 2013-04-22 13:53:16

IOException peut être causé par l'ambiguïté du nom de l'assemblage. Par exemple, j'ai nommé une assemblée myproduct.dll, puis y a ajouté une référence dans l'application WPF.EXE. Cela a donné à l' IOExceptionmainwindow.xaml.

2
répondu user1130316 2012-10-26 05:05:34

Voir mon analyse ici. Il y a des explications, ce qui se passe et il y a des solutions: http://connect.microsoft.com/VisualStudio/feedback/details/759432 ("Analyse de la "Impossible de localiser des ressources d'application.xaml" crash (projets WPF)")

1
répondu lexapilot 2012-09-27 01:08:06

Case App.xamlStartupUri balise (si vous avez déplacé le par erreur - oops

0
répondu Simon_Weaver 2012-07-30 03:07:48

Trouver le fichier app.g.cs et le modifier dans le bloc-notes, dans Visual Studio, il va vous demander de recharger le fichier, cliquez sur OK et le tour est joué

0
répondu killo9ramm 2012-10-20 13:47:14

même problème mais une autre solution:

pour moi, mon nom d'assemblée et le namespace par défaut étaient les mêmes mais différent du nom du projet. J'ai en fait mis à jour le nom de namespace et le nom d'assemblée par défaut pour correspondre au nouveau nom de projet et il l'a corrigé.

0
répondu joshcomley 2014-02-07 21:05:08

j'ai remarqué ce problème après avoir localisé mon application. Je me suis retrouvé avec une ressource satellite que je n'ai pas inclus dans mon script d'installation. Donc, bien qu'il ait fonctionné dans Visual Studio, la construction de l'installateur séparément a causé ce problème.

inclure la dll satellite a fait l'affaire.

0
répondu Charlie Salts 2015-01-12 02:23:07

pour résoudre ce problème s'il vous plaît aller à L'application.Xaml et changer le StsrtUpUri que vous voulez lancer lorsque l'application tourne. enter image description here

modifier L'Uri de démarrage enter image description here

et si le Xaml est dans n'importe quel dossier, vous pouvez ajouter comme suit

StartupUri="Afficher/Mavue.xaml

0
répondu Debendra Dash 2018-09-22 17:13:24