J'ai une application WPF.
Page qui s'ouvre lorsque l'application s'exécute dans MainWindow.xaml, comme défini dans l'attribut StartupUri du fichier App.xaml. Cette page s'ouvre très bien.
Cependant, si j'essaie d'ouvrir d'autres fenêtres à l'aide de la méthode Show ou ShowDialog, j'obtiens une IOException dans la méthode InitializeComponent disant "Impossible de localiser la ressource 'Window1.xaml'" (ou quel que soit le nom du fichier). Cela se produit avec chaque fenêtre que je crée. J'ai cherché en ligne mais toutes les solutions semblent dire "assurez-vous que l'attribut StartupUri de App.xaml est correct" et le mien l'est, d'où l'ouverture de MainWindow.
Une idée de ce qui se passe?
Ce qui précède n'a pas fonctionné pour moi, mais ce qui a fonctionné était le suivant. Ouvrez 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 ensuite remplacer l'URI de démarrage par l'URI complet. Dans mon cas, j'avais déplacé mon MainWindow.xaml
dans 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 le "AssemblyName" et le "Default Namespace" sur les paramètres du projet avaient la même valeur. La modification de AssemblyName en autre chose a résolu le problème.
J'ai eu le même problème. La raison pour moi parce que j'ai déplacé le MainWindow.xaml sans ajuster le App.xaml. Si vous déplacez votre MainWindow.xaml par exemple dans un dossier appelé "UI", vous devez ajuster la ligne suivante dans App.xaml
StartupUri="UI/Mainwindow.xaml"
Si vous ouvrez le code-behind pour le fichier Window1.xaml (c'est-à-dire Window1.xaml.cs), vous pouvez cliquer avec le bouton droit sur l'appel de méthode InitializeComponent et sélectionner "Goto Definition". Il y aura du code comme celui-ci:
/// <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, vous recevrez alors l'erreur que vous avez obtenue.
En outre, si l'action de génération du fichier XAML n'est pas définie sur "Page", vous auriez également ce problème. Pour vérifier cela, vous pouvez sélectionner le fichier dans l'Explorateur de solutions et appuyer sur F4.
Enfin, si quelque chose renomme le fichier XAML dans le cadre de votre processus de génération (comme l'obscurcissement), vous recevrez à nouveau cette erreur.
En dehors de cela, j'essaierais une "solution propre" et une "solution de reconstruction" pour garantir que le fichier avec la définition InitializeComponent 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/Formulaires/est ma structure de dossiers dans mon projet. Assurez-vous que cela est mentionné dans app.xaml
Ce IOException
peut être dû à l'ambiguïté du nom de l'assembly. Par exemple, j'ai nommé un assembly myproduct.dll
, puis y a ajouté une référence dans l'application WPF myproduct.exe. Cela a donné le IOException
pour mainwindow.xaml
.
Enregistrement App.xaml
la balise StartupUri
(si vous avez déplacé la MainWindow
).
Voir mon analyse ici. Il est expliqué, ce qui se passe et il existe également une solution de contournement: http://connect.Microsoft.com/VisualStudio/feedback/details/759432 ("Analyse de la" Impossible de localiser la ressource app.xaml " crash (projets WPF) ")
De plus, s'il vous arrive de remplacer OnStartup(StartupEventArgs e)
dans votre app.xaml.cs, vous devez également supprimer la ligne StartUri="mainwindow.xaml"
depuis app.xaml. Sinon, vous obtiendrez "Impossible de localiser la ressource 'MainWindow1.xaml'" également dans ce cas.
Même moi, j'ai eu le même problème, d'abord j'ai continué à creuser le problème, il pointait vers InitializeComponent();
J'ai finalement découvert que j'avais mis à jour Resources.resx
le contenu du fichier, mais dans mon dossier d'application je ne l'ai pas mis à jour. Donc, plus tard, j'ai copié le nouveau fichier resx et je l'ai essayé. Maintenant ça marche bien.
N'importe qui au cas où viendrait ce problème, regardez-le une fois.
Même problème mais encore une autre solution:
Pour moi, mon nom d'assembly et l'espace de noms par défaut étaient les mêmes mais différents du nom du projet. J'ai en fait mis à jour l'espace de noms et le nom d'assembly par défaut pour qu'ils correspondent au nouveau nom du projet et il l'a corrigé.
Assurez-vous que vous n'avez pas accidentellement déplacé le fichier MainWindow.xaml
Le mien s'est en quelque sorte glissé dans Views
par erreur - oups
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 incluse dans mon script d'installation. Ainsi, alors qu'il fonctionnait dans Visual Studio, la création du programme d'installation séparément a provoqué ce problème.
L'inclusion de la DLL satellite a fait l'affaire.
Trouvez le fichier app.g.cs
et éditez-le dans le Bloc-notes, dans Visual Studio il vous demandera de recharger le fichier, cliquez sur OK et le tour est joué