可視化樣式可讓通用控件的外觀根據使用者所選擇的主題來變更。 根據預設,Windows Presentation Foundation (WPF) 應用程式不會啟用可視化樣式,因此您必須手動加以啟用。 不過,啟用 WPF 應用程式的可視化樣式,然後發布解決方案會造成錯誤。 本主題描述如何解決此錯誤,以及啟用可視化樣式的 WPF 應用程式發佈程式。 如需可視化樣式的詳細資訊,請參閱 可視化樣式概觀。 如需錯誤訊息的詳細資訊,請參閱 針對 ClickOnce 部署中的特定錯誤進行疑難解答。
若要解決錯誤併發佈解決方案,您必須執行下列工作:
-
然後,您可以將已發佈的檔案移至您希望終端使用者安裝應用程式的位置。
發佈未啟用可視化樣式的解決方案
請確定您的專案未啟用視覺化樣式。 首先,檢查專案的指令清單檔是否有下列 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 項目中開啟指令清單檔案
在功能表欄上,選擇 [專案]、[ 專案名稱屬性],其中 ProjectName 是 WPF 項目的名稱。
WPF 專案的屬性頁隨即出現。
在 [ 應用程式] 索引標籤上,選擇 [ 檢視 Windows 設定]。
app.manifest 檔案會在程式 碼編輯器中開啟。
若要在 C# 項目中開啟指令清單檔案
在功能表欄上,選擇 [專案]、[ 專案名稱屬性],其中 ProjectName 是 WPF 項目的名稱。
WPF 專案的屬性頁隨即出現。
在 [ 應用程式] 索引標籤上,記下出現在指令清單欄位中的名稱。 這是與您的項目相關聯的指令清單名稱。
備註
如果 內嵌具有預設設定的指令清單 或 [建立沒有指令清單的應用程式] 會出現在指令清單欄位中,則不會啟用可視化樣式。 如果指令清單檔的名稱出現在指令清單欄位中,請繼續進行此程式中的下一個步驟。
在 [方案總管] 中,選擇 [顯示所有檔案]。
此按鈕會顯示所有項目專案,包括已排除的項目專案,以及通常隱藏的項目專案。 清單檔案會顯示為專案項目。
建置並發佈您的解決方案。 如需如何發佈解決方案的詳細資訊,請參閱 如何:使用發佈精靈發佈 ClickOnce 應用程式。
建立清單檔案
將下列 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>在 [記事本] 中,按兩下 [ 檔案],然後按下 [ 另存新檔]。
在 [ 另存新檔 ] 對話方塊的 [ 另存新檔類型 ] 下拉式清單中,選取 [所有檔案]。
在 [ 檔名] 方塊中,將檔案命名為 ,並將 .manifest 附加至檔名的結尾。 例如: themes.manifest。
選擇 [ 瀏覽資料夾] 按鈕,選取任何資料夾,然後按兩下 [ 儲存]。
備註
其餘程式假設此檔案的名稱是 themes.manifest ,而且該檔案會儲存到您電腦上的 C:\temp 目錄。
將指令清單檔內嵌至已發行方案的可執行檔
開啟 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
您不需要使用上述名稱或目錄位置。 上述名稱和位置僅用於說明發佈解決方案所需的步驟。
在命令提示字元中,將路徑變更為包含已發佈應用程式檔最新版本的目錄。 下列範例示範此步驟。
cd "%UserProfile%\Documents\Visual Studio version\Projects\MyWPFProject\publish\Application Files\WPFApp_1_0_0_0"在命令提示字元中,執行下列命令,將指令清單檔內嵌至應用程式的可執行檔。
mt -manifest c:\temp\themes.manifest -outputresource:MyWPFApp.exe.deploy
簽署應用程式和部署指令清單
在命令提示字元中,執行下列命令,從目前目錄中的可執行檔中移除 .deploy 擴展名。
ren MyWPFApp.exe.deploy MyWPFApp.exe備註
此範例假設只有一個檔案具有 .deploy 擴展名。 請確定您重新命名此目錄中具有 .deploy 擴展名的所有檔案。
在命令提示字元中,執行下列命令來簽署應用程式指令清單。
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)。在命令提示字元中,執行下列命令,將 .deploy 擴展名新增至您在此程式上一個步驟中重新命名的檔名。
ren MyWPFApp.exe MyWPFApp.exe.deploy備註
此範例假設只有一個檔案具有 .deploy 擴展名。 請確定您重新命名此目錄中先前具有 .deploy 擴展名的所有檔案。
在命令提示字元中,執行下列命令來簽署部署指令清單。
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執行這些步驟之後,您可以將已發佈的檔案移至您希望終端使用者安裝應用程式的位置。 如果您想要經常更新解決方案,您可以將這些命令移至腳本,並在每次發佈新版本時執行腳本。