WPF IOException Не удается найти ресурс - PullRequest
46 голосов
/ 29 июня 2011

У меня есть приложение WPF.

Страница, которая открывается, когда приложение запускается в MainWindow.xaml, как установлено в атрибуте StartupUri файла App.xaml.Эта страница открывается нормально.

Однако, если я пытаюсь открыть любое другое окно, используя метод Show или ShowDialog, я получаю IOException в методе InitializeComponent, говорящем "Не удается найти ресурс 'Window1.xaml'" (или как там называется файл).Это происходит с каждым окном, которое я создаю.Я искал в Интернете, но все решения, кажется, говорят "убедитесь, что атрибут StartupUri в App.xaml правильный", а у меня - отсюда открытие MainWindow.

Есть идеи, что происходит?

Ответы [ 16 ]

59 голосов
/ 19 марта 2013

Вышеописанное не сработало, но сработало следующее. Откройте 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 на полностью определенный. В моем случае я переместил свой MainWindow.xaml в папку с именем «Main», поэтому изменив вышеуказанный URI на

StartupUri="Main/MainWindow.xaml"

Решил мою проблему.

12 голосов
/ 05 апреля 2012

У меня была эта проблема, когда «AssemblyName» и «Default Namespace» в настройках проекта имели одинаковое значениеИзменение AssemblyName на что-то другое решило проблему.

9 голосов
/ 22 мая 2013

У меня была такая же проблема.Причина для меня, потому что я переместил MainWindow.xaml без настройки App.xaml.Если вы переместите свой MainWindow.xaml, например, в папку с именем «UI», вы должны настроить следующую строку в App.xaml

         StartupUri="UI/Mainwindow.xaml"
9 голосов
/ 29 июня 2011

Если вы откроете код для файла Window1.xaml (т.е. Window1.xaml.cs), вы можете щелкнуть правой кнопкой мыши вызов метода InitializeComponent и выбрать «Перейти к определению». Будет код, подобный следующему:

/// <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 как часть вашего процесса сборки (например, обфускация), вы снова получите эту ошибку.

Кроме этого, я бы попробовал «Чистое решение» и «Перестроить решение», чтобы убедиться, что файл с определением InitializeComponent перестроен.

3 голосов
/ 22 апреля 2013
<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

2 голосов
/ 04 января 2012

Это IOException может быть вызвано неоднозначностью имени сборки.Например, я назвал сборку myproduct.dll, а затем добавил ссылку на нее в приложении WPF myproduct.exe.Это дало IOException для mainwindow.xaml.

1 голос
/ 22 сентября 2018

Чтобы решить эту проблему, перейдите в App.Xaml и измените StsrtUpUri, который вы хотите запускать при запуске приложения.enter image description here

Измените Uri запуска enter image description here

И если Xaml находится внутри любой папки, вы можете добавить ее следующим образом

StartupUri = "Просмотр / MyView.xaml"

1 голос
/ 19 июня 2015

Даже у меня была та же проблема, сначала я продолжал копать проблему, но она указывала на InitializeComponent(); Я наконец-то обнаружил, что обновил Resources.resx содержимое файла, но в папке своего приложения я не обновил его. Позже скопировал новый файл resx и попробовал его. Теперь работает нормально.

Только кто-нибудь в случае, если придет с этой проблемой, посмотрите на этот раз.

1 голос
/ 24 августа 2012

Смотрите мой анализ здесь.Объясняется, что происходит, и есть обходной путь: http://connect.microsoft.com/VisualStudio/feedback/details/759432 («Анализ сбоя« Не удается найти ресурс app.xaml »(проекты WPF)»)

1 голос
/ 06 августа 2012

Установите App.xaml тег StartupUri (если вы переместили MainWindow).

...