Поделиться через


Публикация приложения 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.

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