WPF IOException Не удается найти ресурс
У меня есть приложение WPF.
Страница, которая открывается при запуске приложения в MainWindow.xaml, как указано в атрибуте StartupUri файла App.xaml. Эта страница открывается отлично.
Однако, если я попытаюсь открыть любые другие окна с помощью метода Show или ShowDialog, я получаю исключение IOEx в методе InitializeComponent, говоря "Невозможно найти ресурс" Window1.xaml "(или любой другой файл, который вызывается). Это происходит с каждым отдельным окном, которое я создаю. Я искал в Интернете, но все решения, похоже, говорят" убедитесь, что атрибут StartupUri для App.xaml верен", а мой - это открытие MainWindow.
Любая идея, что происходит?
Ответы
Ответ 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 сделало трюк.