Подтвердить что ты не робот

WPF IOException Не удается найти ресурс

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

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

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

Любая идея, что происходит?

4b9b3361

Ответ 1

Вышеуказанное не помогло мне, но что было сделано следующим образом. Откройте 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"

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

Ответ 2

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

Ответ 3

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

         StartupUri="UI/Mainwindow.xaml"

Ответ 4

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

/// <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 в приведенном выше коде неверен, вы получите эту ошибку.

Кроме того, если в действии Build Action файла XAML не указано значение "Страница", вы также столкнетесь с этой проблемой. Чтобы проверить это, вы можете выбрать файл в обозревателе решений и нажать F4.

Наконец, если что-то переименовывает файл XAML как часть вашего процесса сборки (например, обфускацию), то вы снова получите эту ошибку.

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

Ответ 5

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

here/Forms/- это моя структура папок в моем проекте. Убедитесь, что это указано в app.xaml

Ответ 6

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

Ответ 7

Также, если вам придётся переопределить OnStartup(StartupEventArgs e) в вашем app.xaml.cs, вам также необходимо удалить строку StartUri="mainwindow.xaml" из app.xaml. В противном случае вы получите "Невозможно найти ресурс MainWindow1.xaml". В этом случае.

Ответ 8

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

Ответ 9

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

Просто каждый, кто придет с этой проблемой, посмотрит на это один раз.

Ответ 10

Найдите файл app.g.cs и отредактируйте его в "Блокноте", в Visual Studio он попросит вас перезагрузить файл, нажмите "ОК" и "вуаля"

Ответ 11

Убедитесь, что вы случайно не переместили файл MainWindow.xaml Мою как-то потащили в Views по ошибке - oops

Ответ 12

Проверьте App.xaml тег StartupUri (если вы переместили MainWindow).

Ответ 13

Такая же проблема, но еще одно решение:

Для меня мое имя сборки и пространство имен по умолчанию были одинаковыми, но отличными от имени проекта. Я фактически обновил пространство имен по умолчанию и имя сборки в соответствии с новым именем проекта и исправил его.

Ответ 14

Я заметил эту проблему после того, как я локализовал свое приложение. Я получил спутниковый ресурс, который я не включил в мой установщик script. Поэтому, когда он работал в Visual Studio, создание этого установщика отдельно вызвало эту проблему.

Включение спутника dll сделало трюк.