如何:发布启用了视觉样式的 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 的清单文件项目
在菜单栏上,依次选择 项目, ProjectName属性,其中 ProjectName 是 WPF 项目的名称。
WPF 项目的属性页。
在 应用程序 选项卡中,选择 视图窗口设置。
app.manifest 文件在 代码编辑器打开。
若要打开 c# 中的清单文件项目
在菜单栏上,依次选择 项目, ProjectName属性,其中 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 和 Windows SDK 命令提示。
备注
其余步骤对解决方案的以下假设:
-
解决方案的名称是 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 – passwordPassword)。
在命令提示处,运行下列命令添加 .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 – passwordPassword。
在执行这些步骤之后,可以将发布文件您希望最终用户安装应用程序的位置。 如果您打算经常更新解决方案,则您可以将这些命令脚本和每次运行该脚本您发布新版本。
请参见
参考
Enabling Visual Styles
Visual Studio 和 Windows SDK 命令提示