InitializeComponent() Невозможно найти ресурс на основе системного языка

Приложение было разработано на компьютерах под управлением Windows 10 с системным языком, установленным на наш местный язык, датский. Сейчас мы находимся на этапе, когда программное обеспечение необходимо использовать в офисах в других странах. Однако при запуске на этих машинах происходит сбой представления, и я обнаружил, что если я изменю язык системы на своей машине, он также не будет работать для меня. Почему это, мы не можем понять.

Сообщение об ошибке от InitializeComponent:

System.IO.IOException: "Не удается найти ресурс" views/main/mainview.xaml'.'

Трассировки стека:

в MS.Internal.AppModel.ResourcePart.GetStreamCore(режим FileMode, доступ к FileAccess) в System.IO.Packaging.PackagePart.GetStream(доступ в FileMode, доступ FileAccess) в System.IO.Packaging.PackagePart.GetStream() в System.Windows.Application.LoadComponent(компонент Object, Uri resourceLocator) в InfoCenter.Views.Main.MainView.InitializeComponent() в D:\ Рабочая область \Visual Studio\ Информационный центр MT WPF\ Информационный центр \Views\Main\MainView.xaml: строка 1 в InfoCenter.Views.Main.MainView..ctor() в D:\Workspace\Visual Studio\MT Инфо-центр WPF\Info Center\Views\Main\MainView.xaml.cs: строка 21 в InfoCenter.App.OnStartup(StartupEventArgs e) в D:\Workspace\Visual Studio\MT Info Center WPF\Info Center\App.xaml.cs: строка 57 в System.Windows.Application. <. ctor> b__1_0 (объект не используется) в System.Windows.Threading.ExceptionWrapper.InternalRealCall(обратный вызов делегата, объектные аргументы, Int32 numArgs) в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (исходный объект, обратный вызов делегата, объектные аргументы, Int32 numArgs, D изящный catchHandler) в System.Windows.Threading.DispatcherOperation.InvokeImpl () в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext (состояние объекта) в System.Threading.ExecutionContext.RunInternal (ExecutionContext executeContext, StateCallSynback) вызывает обратный вызов в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, Boolean preserveSyncCtx) в System.Threading.ExecutionContext.Run (обратный вызов ExecutionContext executeContext, contextCallback, состояние объекта) в MS.Internal.xtxtteving, Обратный вызов ContextCallback, состояние объекта) в System.Windows.Threading.DispatcherOperation.Invoke () в System.Windows.Threading.Dispatcher.ProcessQueue () в System.Windows.Threading.Dispatcher.WndProcHook (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.HwndWrapper.WndProc (IntPtr hwnd, I nt32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (делегат обратного вызова, объектные аргументы, Intreading.Windows).ExceptionWrapper..HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) в MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) в System.Windows.Threading.DispatcherImpmera. Dispatcher.PushFrame(фрейм DispatcherFrame)
в System.Windows.Application.RunDispatcher(игнорирование объекта) в System.Windows.Application.RunInternal(окно) в System.Windows.Application.Run(окно) в System.Windows.Application.Run() в InfoCenter.App.Main() в D:\Workspace\Visual Studio\MT Info Center WPF\Info Center\obj\Debug\App.g.cs: строка 51

Вот часть кода:

App.xaml

<!--ANCHOR: Updater-->
<updater:SingleInstanceApplication x:Class="InfoCenter.App"
                                   x:Name="App"
                                   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                                   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                                   xmlns:updater="clr-namespace:InfoCenter.Updater">
    <Application.Resources>
    </Application.Resources>
</updater:SingleInstanceApplication>

App.xaml.cs:

protected override void OnStartup(StartupEventArgs e)
{
    if (PreProcessor.Prod)
        Dispatcher.UnhandledException += OnDispatcherUnhandledException;

    base.OnStartup(e);

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

    var app = new MainView { ShowInTaskbar = false, Topmost = true }
    var context = new MainViewModel();
    app.DataContext = context;
    app.Show();
}

Другая информация: - Мы разворачиваем, используя ClickOnce. - В приложении есть фоновые задачи, которые будут продолжать работать. Похоже, это просто работает без представления. - Используем шаблон MVVM.

Если мне не хватает какой-либо информации, не стесняйтесь спрашивать!

1 ответ

Решение

Это была проблема, связанная с Culure Info, так как вы добавили эту строку в свой файл ресурсов

<UICulture>en-US</UICulture> 

После этого поста вы сможете решить свою проблему, раскомментировав эту строку

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 

в вашем Assembly.info.cs

Другие вопросы по тегам