Публикация приложения WPF с включенными визуальными стилями

Визуальные стили позволяют изменять внешний вид общих элементов управления на основе темы, выбранной пользователем. По умолчанию визуальные стили не включены для приложений Windows Presentation Foundation (WPF), поэтому их необходимо включить вручную. Однако включение визуальных стилей для приложения WPF, а затем публикация решения приводит к ошибке. В этом разделе описывается, как устранить эту ошибку и процесс публикации приложения WPF с включенными визуальными стилями. Дополнительные сведения о визуальных стилях см. в обзоре визуальных стилей. Дополнительные сведения об сообщении об ошибке см. в статье "Устранение конкретных ошибок в развертываниях ClickOnce".

Чтобы устранить ошибку и опубликовать решение, необходимо выполнить следующие задачи:

Публикация решения без включения визуальных стилей

  1. Убедитесь, что в проекте нет визуальных стилей. Сначала проверка файл манифеста проекта для следующего XML-кода. Затем, если XML присутствует, заключите XML-файл с тегом комментария.

    По умолчанию стили визуальных элементов не включены.

    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
        </dependentAssembly>
    </dependency>
    

    В следующих процедурах показано, как открыть файл манифеста, связанный с проектом.

    Открытие файла манифеста в проекте Visual Basic

    1. В строке меню выберите "Проект", "Свойства ProjectName", где Имя_проекта — имя проекта WPF.

      Отображаются страницы свойств для проекта WPF.

    2. На вкладке "Приложение" выберите "Вид Windows Параметры".

      Файл app.manifest открывается в редакторе кода.

    Открытие файла манифеста в проекте C#

    1. В строке меню выберите "Проект", "Свойства ProjectName", где Имя_проекта — имя проекта WPF.

      Отображаются страницы свойств для проекта WPF.

    2. На вкладке "Приложение" запишите имя, которое отображается в поле манифеста. Это имя манифеста, связанного с проектом.

      Примечание.

      Если манифест внедрения с параметрами по умолчанию или создать приложение без манифеста отображается в поле манифеста, визуальные стили не включены. Если имя файла манифеста отображается в поле манифеста, перейдите к следующему шагу в этой процедуре.

    3. В обозревателе решений выберите Показать все файлы.

      Эта кнопка показывает все элементы проекта, включая исключенные и скрытые. Файл манифеста отображается как элемент проекта.

  2. Создайте и опубликуйте решение. Дополнительные сведения о публикации решения см. в статье "Практическое руководство. Публикация приложения ClickOnce с помощью мастера публикации".

Создание файла манифеста

  1. Вставьте следующий XML-файл в файл Блокнот.

    Этот XML-код описывает сборку, содержащую элементы управления, поддерживающие визуальные стили.

    <?xml version="1.0" encoding="utf-8"?>
    <asmv1:assembly manifestVersion="1.0"
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <dependency>
            <dependentAssembly>
                <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
            </dependentAssembly>
        </dependency>
    </asmv1:assembly>
    
  2. В Блокнот нажмите кнопку "Файл" и нажмите кнопку "Сохранить как".

  3. В диалоговом окне "Сохранить как" в раскрывающемся списке "Сохранить как" выберите "Все файлы".

  4. В поле "Имя файла" назовите файл и добавьте манифест в конец имени файла. Например: themes.manifest.

  5. Нажмите кнопку "Обзор папок ", выберите любую папку и нажмите кнопку "Сохранить".

    Примечание.

    Остальные процедуры предполагают, что имя этого файла — themes.manifest и что файл сохраняется в каталоге C:\temp на компьютере.

Внедрение файла манифеста в исполняемый файл опубликованного решения

  1. Откройте командную строку разработчика для Visual Studio.

    Дополнительные сведения о том, как открыть командную строку разработчика для Visual Studio, см. в командной строке разработчика и PowerShell разработчика.

    Примечание.

    Остальные шаги делают следующие предположения о решении:

    • Имя решения — MyWPFProject.

    • Решение находится в следующем каталоге: %UserProfile%\Documents\Visual Studio version\Projects\

    • Решение публикуется в следующем каталоге: %UserProfile%\Documents\Visual Studio version\Projects\publish

    • Последняя версия опубликованных файлов приложения находится в следующем каталоге: %UserProfile%\Documents\Visual Studio version\Projects\publish\Application Files\WPFApp_1_0_0_0

    Вам не нужно использовать имя или расположения каталога, описанные выше. Имя и расположения, описанные выше, используются только для иллюстрации шагов, необходимых для публикации решения.

  2. В командной строке измените путь к каталогу, который содержит последнюю версию опубликованных файлов приложения. В следующем примере показан этот шаг.

    cd "%UserProfile%\Documents\Visual Studio version\Projects\MyWPFProject\publish\Application Files\WPFApp_1_0_0_0"
    
  3. В командной строке выполните следующую команду, чтобы внедрить файл манифеста в исполняемый файл приложения.

    mt -manifest c:\temp\themes.manifest -outputresource:MyWPFApp.exe.deploy
    

Подписывание манифестов приложения и развертывания

  1. В командной строке выполните следующую команду, чтобы удалить расширение .deploy из исполняемого файла в текущем каталоге.

    ren MyWPFApp.exe.deploy MyWPFApp.exe
    

    Примечание.

    В этом примере предполагается, что только один файл имеет расширение .deploy . Убедитесь, что все файлы в этом каталоге имеют расширение .deploy .

  2. В командной строке выполните следующую команду, чтобы подписать манифест приложения.

    mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx
    

    Примечание.

    В этом примере предполагается, что вы подписываете манифест с помощью PFX-файла проекта. Если манифест не подписан, можно опустить -cf параметр, используемый в этом примере. Если вы подписывание манифеста с помощью сертификата, требующего пароля, укажите -password параметр (For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password).

  3. В командной строке выполните следующую команду, чтобы добавить расширение .deploy в имя файла, переименованного на предыдущем шаге этой процедуры.

    ren MyWPFApp.exe MyWPFApp.exe.deploy
    

    Примечание.

    В этом примере предполагается, что только один файл имел расширение .deploy . Обязательно переименуйте все файлы в этом каталоге, которые ранее имели расширение имени файла .deploy .

  4. В командной строке выполните следующую команду, чтобы подписать манифест развертывания.

    mage -u ..\..\MyWPFApp.application -appm MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx
    

    Примечание.

    В этом примере предполагается, что вы подписываете манифест с помощью PFX-файла проекта. Если манифест не подписан, можно опустить -cf параметр, используемый в этом примере. Если вы подписывание манифеста с сертификатом, требующим пароля, укажите -password параметр, как в этом примере:For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password.

    После выполнения этих действий вы можете переместить опубликованные файлы в расположение, из которого конечные пользователи должны установить приложение. Если вы планируете часто обновлять решение, эти команды можно переместить в скрипт и запустить скрипт при каждом публикации новой версии.