Publikowanie aplikacji WPF przy użyciu włączonej funkcji stylów wizualnych

Style wizualne umożliwiają zmianę typowych kontrolek na podstawie motywu wybranego przez użytkownika. Domyślnie style wizualizacji nie są włączone dla aplikacji Windows Presentation Foundation (WPF), dlatego należy je włączyć ręcznie. Jednak włączenie stylów wizualizacji dla aplikacji WPF, a następnie opublikowanie rozwiązania powoduje błąd. W tym temacie opisano sposób rozwiązywania tego błędu i procesu publikowania aplikacji WPF z włączonymi stylami wizualnymi. Aby uzyskać więcej informacji na temat stylów wizualizacji, zobacz Omówienie stylów wizualnych. Aby uzyskać więcej informacji na temat komunikatu o błędzie, zobacz Rozwiązywanie problemów z określonymi błędami we wdrożeniach technologii ClickOnce.

Aby rozwiązać problem i opublikować rozwiązanie, należy wykonać następujące zadania:

Publikowanie rozwiązania bez włączonych stylów wizualnych

  1. Upewnij się, że projekt nie ma włączonych stylów wizualnych. Najpierw sprawdź plik manifestu projektu pod kątem następującego kodu XML. Następnie, jeśli kod XML jest obecny, należy ująć kod XML za pomocą tagu komentarza.

    Domyślnie style wizualizacji nie są włączone.

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

    Poniższe procedury pokazują, jak otworzyć plik manifestu skojarzony z projektem.

    Aby otworzyć plik manifestu w projekcie Visual Basic

    1. Na pasku menu wybierz pozycję Projekt, Właściwości ProjectName, gdzie ProjectName jest nazwą projektu WPF.

      Pojawią się strony właściwości projektu WPF.

    2. Na karcie Aplikacja wybierz pozycję Wyświetl Ustawienia systemu Windows.

      Plik app.manifest zostanie otwarty w Edytorze kodu.

    Aby otworzyć plik manifestu w projekcie C#

    1. Na pasku menu wybierz pozycję Projekt, Właściwości ProjectName, gdzie ProjectName jest nazwą projektu WPF.

      Pojawią się strony właściwości projektu WPF.

    2. Na karcie Aplikacja zanotuj nazwę wyświetlaną w polu manifestu. Jest to nazwa manifestu skojarzonego z projektem.

      Uwaga

      Jeśli manifest osadzania z ustawieniami domyślnymi lub Utwórz aplikację bez manifestu pojawi się w polu manifestu , style wizualizacji nie są włączone. Jeśli nazwa pliku manifestu pojawi się w polu manifestu, przejdź do następnego kroku w tej procedurze.

    3. W Eksplorator rozwiązań wybierz pozycję Pokaż wszystkie pliki.

      Ten przycisk zawiera wszystkie elementy projektu, w tym te, które zostały wykluczone, oraz te, które są zwykle ukryte. Plik manifestu jest wyświetlany jako element projektu.

  2. Kompilowanie i publikowanie rozwiązania. Aby uzyskać więcej informacji o sposobie publikowania rozwiązania, zobacz How to: Publish a ClickOnce application using the Publish Wizard (Instrukcje: publikowanie aplikacji ClickOnce przy użyciu Kreatora publikowania).

Tworzenie pliku manifestu

  1. Wklej następujący kod XML do pliku Notatnik.

    Ten kod XML opisuje zestaw zawierający kontrolki obsługujące style wizualizacji.

    <?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. W Notatnik kliknij pozycję Plik, a następnie kliknij przycisk Zapisz jako.

  3. W oknie dialogowym Zapisz jako na liście rozwijanej Zapisz jako typ wybierz pozycję Wszystkie pliki.

  4. W polu Nazwa pliku nadaj plikowi nazwę i dołącz manifest .manifest na końcu nazwy pliku. Na przykład: themes.manifest.

  5. Wybierz przycisk Przeglądaj foldery, wybierz dowolny folder, a następnie kliknij przycisk Zapisz.

    Uwaga

    Pozostałe procedury zakładają, że nazwa tego pliku to themes.manifest i że plik jest zapisywany w katalogu C:\temp na komputerze.

Osadzanie pliku manifestu w pliku wykonywalny opublikowanego rozwiązania

  1. Otwórz wiersz polecenia dla deweloperów dla programu Visual Studio.

    Aby uzyskać więcej informacji na temat otwierania wiersza polecenia dla deweloperów dla programu Visual Studio, zobacz Wiersz polecenia dla deweloperów i Program PowerShell dla deweloperów.

    Uwaga

    Pozostałe kroki obejmują następujące założenia dotyczące rozwiązania:

    • Nazwa rozwiązania to MyWPFProject.

    • Rozwiązanie znajduje się w następującym katalogu: %UserProfile%\Documents\Visual Studio version\Projects\.

    • Rozwiązanie jest publikowane w następującym katalogu: %UserProfile%\Documents\Visual Studio version\Projects\publish.

    • Najnowsza wersja opublikowanych plików aplikacji znajduje się w następującym katalogu: %UserProfile%\Documents\Visual Studio version\Projects\publish\Application Files\WPFApp_1_0_0_0

    Nie musisz używać nazwy ani lokalizacji katalogów opisanych powyżej. Nazwa i lokalizacje opisane powyżej są używane tylko do zilustrowania kroków wymaganych do opublikowania rozwiązania.

  2. W wierszu polecenia zmień ścieżkę do katalogu zawierającego najnowszą wersję opublikowanych plików aplikacji. W poniższym przykładzie pokazano ten krok.

    cd "%UserProfile%\Documents\Visual Studio version\Projects\MyWPFProject\publish\Application Files\WPFApp_1_0_0_0"
    
  3. W wierszu polecenia uruchom następujące polecenie, aby osadzić plik manifestu w pliku wykonywalny aplikacji.

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

Podpisywanie manifestów aplikacji i wdrażania

  1. W wierszu polecenia uruchom następujące polecenie, aby usunąć rozszerzenie .deploy z pliku wykonywalnego w bieżącym katalogu.

    ren MyWPFApp.exe.deploy MyWPFApp.exe
    

    Uwaga

    W tym przykładzie przyjęto założenie, że tylko jeden plik ma rozszerzenie .deploy pliku. Upewnij się, że zmieniono nazwy wszystkich plików w tym katalogu, które mają rozszerzenie .deploy pliku.

  2. W wierszu polecenia uruchom następujące polecenie, aby podpisać manifest aplikacji.

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

    Uwaga

    W tym przykładzie przyjęto założenie, że podpisujesz manifest przy użyciu pliku pfx projektu. Jeśli nie podpisujesz manifestu, możesz pominąć -cf parametr używany w tym przykładzie. Jeśli podpisujesz manifest przy użyciu certyfikatu wymagającego hasła, określ -password opcję (For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password).

  3. W wierszu polecenia uruchom następujące polecenie, aby dodać rozszerzenie .deploy do nazwy pliku, którego nazwa została zmieniona w poprzednim kroku tej procedury.

    ren MyWPFApp.exe MyWPFApp.exe.deploy
    

    Uwaga

    W tym przykładzie przyjęto założenie, że tylko jeden plik miał rozszerzenie .deploy . Upewnij się, że zmieniono nazwy wszystkich plików w tym katalogu, które wcześniej miały rozszerzenie nazwy pliku .deploy .

  4. W wierszu polecenia uruchom następujące polecenie, aby podpisać manifest wdrożenia.

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

    Uwaga

    W tym przykładzie przyjęto założenie, że podpisujesz manifest przy użyciu pliku pfx projektu. Jeśli nie podpisujesz manifestu, możesz pominąć -cf parametr używany w tym przykładzie. Jeśli podpisujesz manifest przy użyciu certyfikatu wymagającego hasła, określ -password opcję, jak w tym przykładzie:For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password

    Po wykonaniu tych kroków można przenieść opublikowane pliki do lokalizacji, z której użytkownicy końcowi mają zainstalować aplikację. Jeśli zamierzasz często aktualizować rozwiązanie, możesz przenieść te polecenia do skryptu i uruchomić skrypt za każdym razem, gdy publikujesz nową wersję.