Visual スタイルが有効になっている WPF アプリケーションの発行

visual スタイルを使用すると、ユーザーが選択したテーマに基づいてコモン コントロールの外観を変更できます。 既定では、Visual スタイルは、Windows Presentation Foundation (WPF) アプリケーションで有効になっていないため、手動で有効にする必要があります。 ただし、WPF アプリケーションの Visual スタイルを有効にすると、ソリューションの発行によりエラーが発生します。 このトピックでは、このエラーを解決する方法と、Visual スタイルを有効にした WPF アプリケーションを発行するためのプロセスについて説明します。 Visual スタイルの詳細については、Visual スタイルの概要に関する記事をご覧ください。 エラー メッセージの詳細については、「ClickOnce 配置の固有のエラーのトラブルシューティング」を参照してください。

エラーを解決し、ソリューションを公開するには、次のタスクを実行します。

Visual スタイルを有効にせずにソリューションを公開するには

  1. プロジェクトに有効になった Visual スタイルがないことを確認します。 最初に、プロジェクトのマニフェスト ファイルに次の XML があるかチェックします。 その後、XML がある場合は、コメント タグで XML を囲みます。

    既定では、Visual スタイルは有効になっていません。

    <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のプロパティ] の順に選択します。ProjectName は WPF プロジェクトの名前です。

      WPF プロジェクトのプロパティ ページが表示されます。

    2. [アプリケーション] タブで、[Windows 設定の表示] をクリックします。

      コード エディターで app.manifest ファイルが開きます。

    C# プロジェクトのマニフェスト ファイルを開くには

    1. メニュー バーで、[プロジェクト]、[ProjectNameのプロパティ] の順に選択します。ProjectName は WPF プロジェクトの名前です。

      WPF プロジェクトのプロパティ ページが表示されます。

    2. [アプリケーション] タブで、マニフェストのフィールドに表示される名前をメモします。 これは、プロジェクトに関連付けられているマニフェストの名前です。

      Note

      [マニフェストを既定の設定で埋め込みます] または [マニフェストなしでアプリケーションを作成する] がマニフェスト フィールドに表示されている場合、Visual スタイルは有効になりません。 マニフェスト ファイルの名前がマニフェスト フィールドに表示されている場合は、この手順の次の手順に進みます。

    3. ソリューション エクスプローラーで、[すべてのファイルを表示] をクリックします。

      このボタンは、除外された項目や通常は表示されない項目も含め、すべてのプロジェクト項目を表示します。 マニフェスト ファイルはプロジェクト項目として表示されます。

  2. ソリューションをビルドし、発行します。 ソリューションを発行する方法の詳細については、「方法: 発行ウィザードを使用して ClickOnce アプリケーションを発行する」を参照してください。

マニフェスト ファイルの作成

  1. 次の XML をメモ帳ファイルに貼り付けます。

    この XML は、Visual スタイルをサポートするコントロールを含むアセンブリについて説明します。

    <?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. [ファイル名] ボックスで、ファイルに名前を付け、ファイル名の最後に .manifest を付けます。 例: themes.manifest

  5. [フォルダーの参照] ボタンをクリックしてフォルダーを選択し、[保存] をクリックします。

    Note

    残りの手順では、このファイルの名前が themes.manifest で、ファイルがコンピューターの C:\temp ディレクトリに格納されていることを前提とします。

マニフェスト ファイルを発行済みソリューションの実行可能ファイルに埋め込むには

  1. Visual Studio 用開発者コマンド プロンプトを開きます。

    Visual Studio の開発者コマンド プロンプトを開く方法の詳細については、開発者コマンド プロンプトと開発者用 PowerShell に関する記事をご覧ください。

    Note

    残りの手順は、ソリューションに関して以下を前提とします。

    • ソリューションの名前は 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
    

    Note

    この例では、1 つのファイルだけが .deploy ファイル拡張子を持っていると仮定しています。 必ず、このディレクトリ内の .deploy ファイル拡張子を持つすべてのファイルの名前を変更してください。

  2. コマンド プロンプトで、次のコマンドを実行してアプリケーション マニフェストに署名します。

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

    Note

    この例では、プロジェクトの .pfx ファイルを使用してマニフェストに署名すると仮定しています。 マニフェストに署名しない場合は、この例で使用されている -cf パラメーターを省略できます。 パスワードを必要とする証明書でマニフェストに署名する場合は、-password オプションを指定します (For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password)。

  3. コマンド プロンプトで、次のコマンドを実行して、この手順の前の手順で名前を変更したファイルの名前に .deploy 拡張子を追加します。

    ren MyWPFApp.exe MyWPFApp.exe.deploy
    

    Note

    この例では、1 つのファイルだけが .deploy ファイル拡張子を持っていたと仮定しています。 必ず、このディレクトリ内の以前のファイル名拡張子が .deploy だったすべてのファイルの名前を変更してください。

  4. コマンド プロンプトで、次のコマンドを実行して配置マニフェストに署名します。

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

    Note

    この例では、プロジェクトの .pfx ファイルを使用してマニフェストに署名すると仮定しています。 マニフェストに署名しない場合は、この例で使用されている -cf パラメーターを省略できます。 パスワードを必要とする証明書でマニフェストに署名する場合は、次の例のように -password オプションを指定します。For example: mage -u MyWPFApp.exe.manifest -cf ..\..\..\MyWPFApp_TemporaryKey.pfx - password Password

    これらの手順を実行した後、エンド ユーザーがアプリケーションをインストールする場所に、発行されたファイルを移動できます。 ソリューションを頻繁に更新する場合は、新しいバージョンを発行するたびに、スクリプトにこれらのコマンドを移動し、スクリプトを実行できます。