При использовании PresentationFramework.Aero, мне нужно установить" копировать локальный " в true (и включить его в мой проект установки)?
мой проект WPF использует профиль клиента .NET 4. Когда я добавлю
<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
to <Application.Resources>
Я получаю это исключение при запуске программы в режиме отладки (в режиме выхода программа молча вылетает):
первый этап обработки исключения типа - Система.Окна.Разметка.XamlParseException ' произошло в PresentationFramework.dll файлы
дополнительная информация: 'Set property - Система.Окна.Объект ResourceDictionary.Источник' выбросил исключение.' Линия число '14' и позицию '14'.
когда я устанавливаю свойство "копировать локальный" PresentationFramework.Aero к истине, все работает, и исключение исчезло.
"копировать локальный" помещает копию PresentationFramework.Aero в моем выходном каталоге, и поэтому мне нужно включить его в мой проект установки. почему это необходимо? по данным MSDN PresentationFramework.aero включен в профиль клиента .NET framework 4.0 и поэтому в GAC. Я не чувствую себя комфортно, развертывая файл framework с моим приложением.
Udate:
как предложил Ганс Пассант, я проверил, что каталог PresentationFramework.Aero существует в C:windowsmicrosoft.netassemblygac_msil
. Затем я использовал fuslogvw.exe для создания следующего журнала, созданного при запуске моего приложения " SetACL Studio.exe " без PresentationFramework.Aero.dll присутствует в каталоге приложений. Интересно, что загрузчик не даже проверьте GAC. Почему?
*** Assembly Binder Log Entry (18.11.2011 @ 17:13:27) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:WindowsMicrosoft.NETFramework64v4.0.30319clr.dll
Running under executable D:DatenHelgeProgrammierungSetACL StudioSourceBinDebugSetACL Studio.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = HKT520Helge
LOG: DisplayName = PresentationFramework.Aero, Culture=neutral
(Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: PresentationFramework.Aero, Culture=neutral | Domain ID: 1
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///D:/Daten/Helge/Programmierung/SetACL Studio/Source/Bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = SetACL Studio.exe
Calling assembly : PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:DatenHelgeProgrammierungSetACL StudioSourceBinDebugSetACL Studio.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:WindowsMicrosoft.NETFramework64v4.0.30319configmachine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///D:/Daten/Helge/Programmierung/SetACL Studio/Source/Bin/Debug/PresentationFramework.Aero.DLL.
LOG: Attempting download of new URL file:///D:/Daten/Helge/Programmierung/SetACL Studio/Source/Bin/Debug/PresentationFramework.Aero/PresentationFramework.Aero.DLL.
LOG: Attempting download of new URL file:///D:/Daten/Helge/Programmierung/SetACL Studio/Source/Bin/Debug/PresentationFramework.Aero.EXE.
LOG: Attempting download of new URL file:///D:/Daten/Helge/Programmierung/SetACL Studio/Source/Bin/Debug/PresentationFramework.Aero/PresentationFramework.Aero.EXE.
LOG: All probing URLs attempted and failed.
обновление 2:
это выход из gacutil:
C:Program FilesMicrosoft SDKsWindowsv7.1Bin>gacutil.exe /l presentationframework.aero
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
presentationframework.aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
Number of items = 1
1 ответов
Я только что нашел следующее на MSDN:
вы также можете сделать динамическую ссылку на сборку, предоставив вызывающий метод с только частичной информацией о сборке, такой как как указание только имени сборки. В этом случае, только каталог приложений искали сборка проверка происходит.
это объясняет поведение, которое я видел, и почему GAC не искали PresentationFramework.aero.dll - ... Я изменил динамическую ссылку на полную ссылку и удалил "Copy Local" из PresentationFramework.Аэро. Теперь он работает без необходимости PresentationFramework.aero.dll в моем каталоге приложений.
для справки, вот код словаря рабочего ресурса:
<ResourceDictionary Source="/PresentationFramework.Aero,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL;component/themes/Aero.NormalColor.xaml" />
короче говоря, удалите локальную копию ваших тем (в случае, если вы добавили в своем решении), добавьте полную ссылку в приложение.файл xaml в приложении.Ресурсы (Словарь ресурсов), и это должно сделать.