發佈已啟用視覺樣式的 WPF 應用程式
視覺化樣式可讓通用控制項的外觀根據使用者所選擇的主題來變更。 根據預設,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][屬性],其中 [ProjectName] 是 WPF 專案的名稱。
WPF 專案的屬性頁面隨即出現。
在 [應用程式] 索引標籤上,選擇 [檢視 Windows 設定]。
即會在 [程式碼編輯器] 中開啟 app.manifest 檔案。
若要在 C# 專案中開啟資訊清單檔
在功能表列上,選擇 [專案]、[ProjectName][屬性],其中 [ProjectName] 是 WPF 專案的名稱。
WPF 專案的屬性頁面隨即出現。
在 [應用程式] 索引標籤上,記下出現在資訊清單欄位中的名稱。 這是與您專案相關聯的資訊清單名稱。
注意
如果 [內嵌具有預設設定的資訊清單] 或 [建立沒有資訊清單的應用程式] 出現在資訊清單欄位中,則不會啟用視覺化樣式。 如果資訊清單檔的名稱出現在資訊清單欄位中,請繼續進行此程序中的下一個步驟。
在 [方案總管] 中選擇 [顯示所有檔案]。
此按鈕會顯示所有專案項目,包括已排除的專案項目,以及通常會隱藏的專案項目。 資訊清單檔會顯示為專案項目。
建置換發行方案。 如需如何發佈方案的詳細資訊,請參閱HOW TO:使用發佈精靈發佈 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
。執行這些步驟之後,您可以將已發佈的檔案移至您希望終端使用者安裝應用程式的位置。 如果您想要經常更新方案,則可以將這些命令移至指令碼,並在每次發佈新版本時執行指令碼。