web-dev-qa-db-ja.com

Windows 7がAssembly PresentationFramework.Aero2を読み込めないのはなぜですか?

私は最近、Windows 8を使用して開発している最初のWPFアプリケーションを完成させました。私のマシンでは問題なく動作しました。私の友人は彼のWindows 8マシンのビジュアルスタジオでもそれを実行し、それはうまくいきました。私は自分のマシンにワンクリックでプログラムをインストールし、それはうまくインストールして実行します。

私は仮想ボックスにWindows 7をインストールし、1回のクリックでそれをインストールしようとしました。 .NET 4.5とSQL Server Compactを取得したため、インストールプロセスは問題のないように見えました。 Windows 7がアプリケーションを実行しようとしたときに、有用なことは何も起こりませんでした。 virtualboxにVisual Studioをインストールし、このスタックトレースを取得できました。

GoogleでPresentationFramework.Aero2を調べて、3つのSOの質問と1つのMSDNの質問に出会いました。MSDNの質問は、私が何をしているのかについてのヒントを与えてくれました。Cに行った場合:\Windows\Microsoft.NET\Framework\4.0\WPF PresentationFramework.Aero2.dllファイルはありませんが、Windows 8にはあるので、それをコピーしてWindows 7の同等の場所に貼り付けました。それから来た。

これがスタックトレースです。

System.Windows.Markup.XamlParseException was unhandled
  HResult=-2146233087
  Message='Add value to collection of type 'System.Collections.ObjectModel.ObservableCollection(System.Windows.Controls.DataGridColumn)' threw an exception.' Line number '35' and line position '71'.
  Source=PresentationFramework
  LineNumber=35
  LinePosition=71
  StackTrace:
       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.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
       at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
       at System.Windows.Application.DoStartup()
       at System.Windows.Application.<.ctor>b__1(Object unused)
       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)
       at System.Windows.Threading.DispatcherOperation.InvokeImpl()
       at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Windows.Threading.DispatcherOperation.Invoke()
       at System.Windows.Threading.Dispatcher.ProcessQueue()
       at System.Windows.Threading.Dispatcher.WndProcHook(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)
       at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
       at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
       at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
       at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
       at System.Windows.Threading.Dispatcher.Run()
       at System.Windows.Application.RunDispatcher(Object ignore)
       at System.Windows.Application.RunInternal(Window window)
       at System.Windows.Application.Run(Window window)
       at System.Windows.Application.Run()
       at PremierAutoDataExtractor.App.Main()
  InnerException: System.IO.FileNotFoundException
       HResult=-2147024894
       Message=Could not load file or Assembly 'PresentationFramework.Aero2, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
       Source=mscorlib
       FileName=PresentationFramework.Aero2, PublicKeyToken=31bf3856ad364e35
       FusionLog=WRN: Assembly binding logging is turned OFF.
To enable Assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with Assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

       StackTrace:
            at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
            at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
            at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, 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.ReadObject(KeyRecord record)
            at System.Windows.ResourceDictionary.CreateObject(KeyRecord key)
            at System.Windows.ResourceDictionary.OnGettingValue(Object key, Object& value, Boolean& canCache)
            at System.Windows.ResourceDictionary.OnGettingValuePrivate(Object key, Object& value, Boolean& canCache)
            at System.Windows.ResourceDictionary.GetValueWithoutLock(Object key, Boolean& canCache)
            at System.Windows.ResourceDictionary.GetValue(Object key, Boolean& canCache)
            at System.Windows.DeferredResourceReference.GetValue(BaseValueSourceInternal valueSource)
            at System.Windows.DeferredAppResourceReference.GetValue(BaseValueSourceInternal valueSource)
            at System.Windows.DependencyObject.GetEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, RequestFlags requests)
            at System.Windows.DependencyObject.GetValueEntry(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, RequestFlags requests)
            at System.Windows.DependencyObject.GetValue(DependencyProperty dp)
            at System.Windows.Controls.DataGridHelper.GetCoercedTransferPropertyValue(DependencyObject baseObject, Object baseValue, DependencyProperty baseProperty, DependencyObject parentObject, DependencyProperty parentProperty, DependencyObject grandParentObject, DependencyProperty grandParentProperty)
            at System.Windows.Controls.DataGridColumn.OnCoerceHeaderStyle(DependencyObject d, Object baseValue)
            at System.Windows.DependencyObject.ProcessCoerceValue(DependencyProperty dp, PropertyMetadata metadata, EntryIndex& entryIndex, Int32& targetIndex, EffectiveValueEntry& newEntry, EffectiveValueEntry& oldEntry, Object& oldValue, Object baseValue, Object controlValue, CoerceValueCallback coerceValueCallback, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, Boolean skipBaseValueChecks)
            at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
            at System.Windows.DependencyObject.CoerceValue(DependencyProperty dp)
            at System.Windows.Controls.DataGridHelper.TransferProperty(DependencyObject d, DependencyProperty p)
            at System.Windows.Controls.DataGridColumn.SyncProperties()
            at System.Windows.Controls.DataGrid.UpdateColumnSizeConstraints(IList list)
            at System.Windows.Controls.DataGrid.OnColumnsChanged(Object sender, NotifyCollectionChangedEventArgs e)
            at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
            at System.Windows.Controls.DataGridColumnCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
            at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
            at System.Windows.Controls.DataGridColumnCollection.InsertItem(Int32 index, DataGridColumn item)
            at System.Collections.ObjectModel.Collection`1.Add(T item)
            at System.Collections.ObjectModel.Collection`1.System.Collections.IList.Add(Object value)
            at System.Xaml.Schema.XamlTypeInvoker.AddToCollection(Object instance, Object item)
            at MS.Internal.Xaml.Runtime.ClrObjectRuntime.Add(Object collection, XamlType collectionType, Object value, XamlType valueXamlType)
       InnerException: 
29
Robert

私は同様の問題に遭遇しました。コンテキスト:Visual Studio 2012、Blend for 2012、.NET 4.5を使用してWindows 8でWPFアプリを開発する。 APP.XAMLは、テーマのPresentationFramework.Aero2を参照しました。 ClickOnceを使用したアプリの配布。

Windows 8では問題ありません。 Windows XP/Vista/7では、前述の「アセンブリをロードできませんでした」という例外が記録され、アプリケーションが実行の途中(Aero2を参照する最初のサブページで)クラッシュしました。

試行された修正:プロジェクトでローカルをコピーするようにAero2にフラグを立てる(助けにはならなかった)、ClickOnceインストーラーに含めようとした(使用可能なアセンブリのリストに表示されなかった)、c:\ windows\Microsoft.netの下のターゲットWindows7マシンのWPFフォルダーにコピー\ framework\v4.xx\wpf(助けにはなりませんでした)。

解決:

プロジェクトの参照をPresentationFramework.Aero2からPresentationFramework.Aeroに置き換えてから、一致するようにXAML参照を変更しました。 Windows 8以外のマシンに簡単にプッシュして実行することができます。開発は適切に機能します。見つかった唯一の違いは、プログレスバーのデフォルトの外観が光沢のある/ 3Dであったことです。

40
Paul Vilevac

開発者のマシンには、プレゼンテーションフレームワークアセンブリの2つのバージョンがあります。 Visual Studioは「メタデータのみ」のバージョンを参照します。 C:\ Windows\Microsoft.NET\Framework\v4.0.30319\WPFフォルダーのアセンブリを展開すると、機能するはずです( アセンブリPresentationFramework.Aero2の問題 を参照)。

0
mbihler