web-dev-qa-db-fra.com

WPF IOException Impossible de localiser la ressource

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?

48
lace.john

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.

63
MoonKnight

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.

12
Dennie

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"
9
gosua

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.

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>

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

3
dotnetavalanche

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.

2
user1130316

Enregistrement App.xaml la balise StartupUri (si vous avez déplacé la MainWindow).

1
user1579553

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) ")

1
lexapilot

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.

1
atprof

Pour résoudre ce problème, accédez à App.Xaml et modifiez le StsrtUpUri que vous souhaitez exécuter lors de l'exécution de l'application. enter image description here

Modifiez le démarrage Uri enter image description here

Et si le Xaml est dans un dossier, vous pouvez ajouter comme suit

StartupUri = "View/MyView.xaml"

1
Debendra Dash

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.

1
Sujith H S

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é.

0
joshcomley

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

0
Simon_Weaver

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.

0
Charlie Salts

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é

0
killo9ramm