發佈已啟用視覺樣式的 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. 在功能表列上,選擇 [專案]、[專案名稱][屬性],其中 [專案名稱] 是 WPF 專案的名稱。

      WPF 專案的屬性頁面隨即出現。

    2. 在 [應用程式] 索引標籤上,選擇 [檢視 Windows 設定]

      即會在 [程式碼編輯器] 中開啟 app.manifest 檔案。

    若要在 C# 專案中開啟資訊清單檔

    1. 在功能表列上,選擇 [專案]、[專案名稱][屬性],其中 [專案名稱] 是 WPF 專案的名稱。

      WPF 專案的屬性頁面隨即出現。

    2. 在 [應用程式] 索引標籤上,記下出現在資訊清單欄位中的名稱。 這是與您專案相關聯的資訊清單名稱。

      注意

      如果 [內嵌具有預設設定的資訊清單] 或 [建立沒有資訊清單的應用程式] 出現在資訊清單欄位中,則不會啟用視覺化樣式。 如果資訊清單檔的名稱出現在資訊清單欄位中,請繼續進行此程序中的下一個步驟。

    3. 在 [方案總管] 中選擇 [顯示所有檔案]

      此按鈕會顯示所有專案項目,包括已排除的專案項目,以及通常會隱藏的專案項目。 資訊清單檔會顯示為專案項目。

  2. 建置換發行方案。 如需如何發佈方案的詳細資訊,請參閱HOW TO:使用發佈精靈發佈 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

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