2013-06-27 32 views
19

Son zamanlarda Windows 8 kullanarak geliştirdiğim ilk WPF uygulamasını bitirdim. Makinemde iyi çalıştı. Bir arkadaşım da Windows 8 makinesinde görsel stüdyosunda çalıştı ve işe yaradı. Programı makinemde bir kez tıklatarak yüklüyorum ve iyi yükler ve çalışır.Neden Windows 7, AssemblyFramework.Aero2 derlemesini yükleyemiyor?

Windows 7'yi sanal kutuya yükledim ve bir kez tıklatmayı kullanarak yüklemeyi denedim. .NET 4.5 ve SQL Server Compact'ı getirdi, yükleme işlemi kusursuz görünüyordu. Windows 7 uygulamayı çalıştırmayı denediğinde, yararlı bir şey olmadı. Visual Studio’yu sanal kutuya yükledim ve bu yığın izini elde edebildim.

Google'da PresentationFramework.Aero2'yi inceledim ve 3 SO sorusuyla bir de MSDN sorusuyla karşılaştım. MSDN sorusu bana düşündüğüm şeyin bir ipucunu verdi. C: \ Windows \ Microsoft.NET \ Framework \ 4.0 \ WPF'ye gidersem hiçbir PresentationFramework.Aero2.dll dosyası yok, Windows 8'de ise ... kopyaladım ve pencerelere 7 eşdeğer bir yer umuduyla umuyordum bir şey elde etmek için, ama hiçbir şey gelmedi. İşte

Yığın İzleme geçerli:

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: 

cevap

28

Ben benzer bir sorun koştum. Bağlam: Visual Studio 2012, 2012 için Blend, .NET 4.5 kullanarak Windows 8'de WPF uygulaması geliştirme. APP.XAML, temalar için PresentationFramework.Aero2 öğesini referans aldı. ClickOnce'yi kullanarak Uygulama Dağıtma.

Windows 8'de sorun yok. Windows XP/Vista/7'de, uygulama, daha önce bahsedilen "Yükleme yüklenemedi" istisnasının kaydedilmesiyle (Aero2 referansı verilen ilk alt sayfada) yürütme sırasında parçalanacaktı.

Denemeye alınan düzeltmeler: Projeyi yerel olarak kopyalamak için Aero2'yi işaretleyin (yardımcı olmadı), c: \ windows altındaki Windows7 makinesinde WPF klasörüne kopyalanan ClickOnce Yükleyici'ye (kullanılabilir derlemeler listesinde görünmüyor) dahil edilmeye çalışıldı \ microsoft.net \ framework \ v4.xx \ wpf (yardımcı olmadı).

Çözünürlük:

PresentationFramework.Aero2 gelen PresentationFramework.Aero için projeye başvuru değiştirin ve sonra değiştirilmiş XAML referansları eşleşecek. Windows 8 olmayan makinelere kolayca basabilir ve çalıştırabilir. Geliştirme düzgün çalışıyor. Tek fark, ilerleme çubuklarının varsayılan görünümü parlak/3d idi.

+0

Oh, bu da geriye dönük uyumluluk olarak adlandırılır mı? Bunu bilmiyordum! –

+1

@PaulVilevac, "Referansı ... PresentationFramework.Aero ile değiştir" ile ne demek istiyorsunuz? Tam olarak nasıl değiştirdiniz? Bunun yerine .Aero kullandıysanız veya çözümünüz Windows8 olmayan cihazlarda Aero2 stillerini korudun mu? –

+9

Şaşkınlık yaratan herkes için, yapmanız gereken tek şey projenizden 'PresentationFramework.Aero2' referansını kaldırmak ve 'PresentationFramework.Aero' referansını eklemektir. Ayrıca, tüm ad alanı içe aktarmalarınızda ** Aero2 ** 'yi ** Aero **' ya değiştirmeniz gerekiyor; Örneğin. 'Xmlns: Temalar = "clr-namespace: Microsoft.Windows.Themes; montaj = PresentationFramework.Aero"'. Bununla benim için şeyler düzeltildi. – dotNET

0

Bir geliştirici makinesinde, sunum çerçevesi düzeneklerinin iki sürümü vardır. Visual Studio, "yalnızca meta veriler" sürümüne başvurur. C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ WPF klasörünün derlemesini dağıttığınızda (bkz. Problem with assembly PresentationFramework.Aero2)