2013-06-27 17 views
19

私は最近Windows 8を使用して開発している最初のWPFアプリケーションを完成させました。私の友人もWindows 8マシンのVisual Studioでそれを実行していました。私は一度だけ私のマシン上でクリックしてプログラムをインストールし、それはうまくインストールされ、実行されます。Windows 7でアセンブリPresentationFramework.Aero2を読み込めないのはなぜですか?

仮想ボックスにWindows 7をインストールし、一度クリックしてインストールしようとしました。それは.NET 4.5とSQL Server Compactをフェッチしました。インストールプロセスは完璧ではないようでした。 Windows 7がアプリケーションを実行しようとしたとき、何も役に立たなかった。私はvirtualboxにVisual Studioをインストールし、このスタックトレースを取得することができました。

私はGoogleでPresentationFramework.Aero2を検索し、3つの質問と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: 

答えて

28

私は同様の問題に遭遇しました。コンテキスト: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インストーラーに使用しようとしました(使用可能なアセンブリの一覧に表示されませんでした)、ターゲットWindows7マシンのWPFフォルダーにc:\ windows \ microsoft.net \ framework \ v4.xx \ wpf(これは役に立ちませんでした)。

解像度:

がPresentationFramework.Aero2からPresentationFramework.Aeroにプロジェクト内の参照を交換して、一致するXAML参照を修正。 Windows以外の8台のマシンに簡単にプッシュして稼働させることができました。開発は適切に機能します。違いは、進捗バーのデフォルトの外観が光沢/ 3dであることだけでした。

+0

これは後方互換性とも呼ばれていますか?私はこれを知らなかった! –

+1

@PaulVilevac、「参照をPresentationFramework.Aeroに置き換える」とはどういう意味ですか?あなたはどのくらい正確に "交換"しましたか?代わりに.Aeroを使用しましたか?あるいは、あなたのソリューションはWindows8以外のデバイスでAero2スタイルを保持しましたか? –

+9

他の人が混乱している場合は、プロジェクトから 'PresentationFramework.Aero2'リファレンスを削除し、' PresentationFramework.Aero'リファレンスを追加するだけです。また、あなたのすべての名前空間のインポートで** Aero2 **を** Aero **に変更する必要があります。例えば'xmlns:Themes =" clr-namespace:Microsoft.Windows.Themes; assembly = PresentationFramework.Aero "。これで私のために物事が修正されました。 – dotNET

0

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

関連する問題