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