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?
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.
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.
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"
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.
<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
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' IOException
mainwindow.xaml
.
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)")
Case App.xaml
StartupUri
balise (si vous avez déplacé le par erreur - oops
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é
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é.
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.
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.
et si le Xaml est dans n'importe quel dossier, vous pouvez ajouter comme suit
StartupUri="Afficher/Mavue.xaml