Как развернуть приложение WPF с помощью библиотеки элементов управления ленты?

Я создал приложение WPF (c # / XAML) в Visual Studio 2012 (обновление 4), используя библиотеку элементов управления ленты под .NET 4.0 Win7 32 бит. Он работает нормально, но я не могу заставить его работать под 32-битным хостом Win XP.

Я установил: - .NET 3.5 SP1 - .NET 4.0 - Ribbon для WPF, нашел здесь (то же самое, конечно, установлено на машине, на которой я сделал приложение)

Но это не удается, когда я добавляю ленту в приложение. Я попытался вручную добавить RibbonControlsLibrary.dll, но безуспешно.

Вот журнал слежки:

Message: Could not load file or assembly 'System.Windows.Controls.Ribbon, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.
Stacktrace:
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
   at AppliErgos.MainWindow.InitializeComponent()
   at AppliErgos.MainWindow..ctor()
   at AppliErgos.LogWindow.Button_Click(Object sender, RoutedEventArgs e)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
   at System.Windows.Controls.Primitives.ButtonBase.OnClick()
   at System.Windows.Controls.Button.OnClick()
   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
   at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)


InnerException:

Message: Could not load file or assembly 'System.Windows.Controls.Ribbon, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.
Stacktrace:
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
   at System.Windows.Baml2006.Baml2006SchemaContext.ResolveAssembly(BamlAssembly bamlAssembly)
   at System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlTypeToType(BamlType bamlType)
   at System.Windows.Baml2006.Baml2006SchemaContext.ResolveBamlType(BamlType bamlType, Int16 typeId)
   at System.Windows.Baml2006.Baml2006SchemaContext.GetXamlType(Int16 typeId)
   at System.Windows.Baml2006.Baml2006Reader.Process_ElementStart()
   at System.Windows.Baml2006.Baml2006Reader.Process_OneBamlRecord()
   at System.Windows.Baml2006.Baml2006Reader.Process_BamlRecords()
   at System.Windows.Baml2006.Baml2006Reader.Read()
   at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)

Я что-то пропустил ?


person olivier    schedule 27.10.2014    source источник


Ответы (2)


Вы можете начать с утилиты «Dependency walker» (depends.exe) от SysInternals. Довольно часто есть косвенные ссылки (например, ваше приложение -> ленточная DLL -> какая-то другая пропущенная DLL), которые не сообщаются по имени, но мешают правильной работе приложения. Dependency Walker (или другие подобные инструменты) пролили бы больше света на все дерево используемых модулей (тем не менее, могут быть ложные срабатывания, имейте в виду)

person Yury Schkatula    schedule 27.10.2014
comment
Хороший инструмент. Я его установил и запустил. Он сообщает мне, что отсутствуют 2 библиотеки DLL (ieshims.dll и wer.dll), но я прочитал здесь, что эти dll бесполезны в WinXP и их обнаружение может помешать Dependency Walker завершить дерево ...: - \ - person olivier; 27.10.2014
comment
Я сделал так, чтобы он запускался непосредственно в программе tapecontrolslibrary.dll с тем же результатом, что и во всем приложении! - person olivier; 27.10.2014
comment
Ну, я попытался установить IE7, чтобы эти библиотеки DLL больше не останавливали создание дерева Dependency Walker ... но это не удается в другой DLL (dwmapi.dll), и первые подсказки предлагают ... удалить IE7 ... lol - person olivier; 28.10.2014
comment
Проблема решена ! System .Windows.Controls.Ribbon, похоже, из .NET4.0 ... но устанавливается, только если вы устанавливаете .NET4.5!?!?!?!?!? Нам просто нужно указать Microsoft .Windows.Controls.Ribbon - person olivier; 29.10.2014
comment
Хммм ... Интересно. Показывал ли Dependency walker эту DLL после проверки дерева зависимостей? - person Yury Schkatula; 30.10.2014

Проблема решена ! System .Windows.Controls.Ribbon, похоже, из .NET4.0 ... но устанавливается, только если вы устанавливаете .NET4.5!?!?!?!? !? Нам просто нужно указать Microsoft .Windows.Controls.Ribbon Weird: - \

person olivier    schedule 29.10.2014