共用方式為


發佈已啟用可視化樣式的 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. 在 [ 檔名] 方塊中,將檔案命名為 ,並將 .manifest 附加至檔名的結尾。 例如: 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

    執行這些步驟之後,您可以將已發佈的檔案移至您希望終端使用者安裝應用程式的位置。 如果您想要經常更新解決方案,您可以將這些命令移至腳本,並在每次發佈新版本時執行腳本。