如何:發行已啟用視覺化樣式的 WPF 應用程式
視覺化樣式讓通用控制項的外觀可根據使用者選擇的佈景主題變更。 根據預設,視覺化樣式不為 Windows Presentation Foundation (WPF) 應用程式啟用,因此,您必須手動啟用它們。 不過,啟用 WPF 應用程式的視覺化樣式來發行方案時會產生錯誤。 本主題說明如何解決這個錯誤和發行已啟用視覺化樣式的 WPF 應用程式之流程。 如需視覺化樣式的詳細資訊,請參閱 Visual Styles Overview。 如需錯誤訊息的詳細資訊,請參閱 疑難排解 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 專案中的資訊清單檔案
在選單列中,選擇 [專案],[ProjectNameProperties],其中 [ProjectName] 是您的 WPF 專案名稱。
WPF 專案的屬性頁隨即出現。
在 [應用程式] 索引標籤上,選取 [檢視視窗設定]。
app.manifest 檔案隨即在 程式碼編輯器 中開啟。
開啟 C# 專案的資訊清單檔案
在選單列中,選擇 [專案],[ProjectNameProperties],其中 [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 命令提示字元] 的詳細資訊,請參閱 Visual Studio 命令提示字元。
注意事項 其餘步驟假設您方案中有下列設定:
方案的名稱是 MyWPFProject。
所在目錄為 %UserProfile%\Documents\Visual Studio 2010\Projects\。
方案發行到下列目錄: %UserProfile%\Documents\Visual Studio 2010\Projects\publish。
發行的應用程式檔案的最新版本位於下列目錄: %UserProfile%\Documents\Visual Studio 2010\Projects\publish\Application Files\WPFApp_1_0_0_0
您不需要使用上述的名稱或目錄位置。上述的名稱和位置只用來說明發行方案所需的步驟。
在命令提示字元,請變更路徑為含有已發行的應用程式檔案的最新版本之目錄。 以下範例示範此步驟。
cd "%UserProfile%\Documents\Visual Studio 2010\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)。
在您執行這些步驟之後,您可以將發行的檔案移至您希望使用者安裝應用程式的位置。 如果您打算經常更新方案,您可以將這些命令建立成指令碼檔案,並在每次發行新版本時執行這個指令碼檔案。