Я пытаюсь использовать .NET 4 SplashScreen в WPF-приложении на основе Prism. Я использовал SpashScreen, установив действие сборки на образ SplashScreen.
Приложение, которое продолжало аварийно завершать работу с System.Resources.MissingManifestResourceException
. Наконец, я понял, что если я добавлю StartupUri = "MainWindow.xaml" в файл App.Xaml, SplashScreen работает нормально.
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
</Application>
Но в приложении призмы у нас не может быть StartupUri. Все сделано в Bootstrapper.
Итак, что мне нужно сделать вручную, что StartupUri сделал, чтобы заставить работать SplashScreen?
Обновление 1: Полное сообщение об исключении:
System.Resources.MissingManifestResourceException не обработано
Сообщение = Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Удостовериться
"Application.g.resources" был правильно встроен или связан с
сборка "Приложение" во время компиляции, или это все спутник
требуемые сборки могут быть загружены и полностью подписаны.
Обновление 2:
Я понял, добавление или удаление StartupUri не имеет значения. Важно то, что у меня есть дополнительное окно WPF (кроме App.xaml) или 2 фиктивные записи в теге App.Resources.
<Application.Resources>
<Style x:Key="Dummy"/>
<Style x:Key="Dummy1"/>
</Application.Resources>
Если я этого не сделаю, файл Application.g.resources не будет создан в файле obj и, следовательно, не будет встроен в исполняемый файл.
Добавление двух фиктивных записей о ресурсах привлекло мое внимание к этому сообщению в блоге .
Обновление 3:
На мой вопрос ответил Боб Бао на форуме MSDN здесь . Также кажется, что Кент пытался указать мне в том же направлении.
Не устанавливайте действие сборки изображения на SplashScreen. Вместо этого:
Добавьте код в метод App OnStartup следующим образом:
protected override void OnStartup(StartupEventArgs e)
{
SplashScreen splashScreen = new SplashScreen("splashscreen.png");
splashScreen.Show(true);
base.OnStartup(e);
Bootstrapper bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
"splashscreen.png" - это одно изображение в проекте, и его " Build Action "
это " Ресурс ".