如何:发布启用了视觉样式的 WPF 应用程序

视觉样式启用公共控件外观根据主题的更改选择用户。 默认情况下,视觉样式没有为 windows presentation foundation (WPF) 应用程序启用,因此,必须手动启用它们。 但是,启用 WPF 应用程序的视觉样式发布解决方案然后将生成错误。 本主题介绍如何解决此错误,并使用视觉样式的 WPF 应用程序启用发布的过程。 有关视觉样式的更多信息,请参见Visual Styles Overview。 有关错误信息的更多信息,请参见 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. 在菜单栏上,依次选择 项目, ProjectName属性,其中 ProjectName 是 WPF 项目的名称。

      WPF 项目的属性页。

    2. 应用程序 选项卡中,选择 视图窗口设置

      app.manifest 文件在 代码编辑器打开。

    若要打开 c# 中的清单文件项目

    1. 在菜单栏上,依次选择 项目, ProjectName属性,其中 ProjectName 是 WPF 项目的名称。

      WPF 项目的属性页。

    2. 应用程序 选项,请记下显示已标记字段的名称。 这是与该项目名称的清单。

      备注

      嵌入清单具有默认设置创建应用程序,而无需清单 显示该清单字段,视觉样式未启用。如果清单文件的名称将显示已标记字段,请执行本过程中的下一步。

    3. 解决方案资源管理器,选择 显示所有文件 ()。

      此按钮显示所有项目项,包括被排除通常是隐藏的过程以及管理员。 清单文件显示为项目项。

  2. 生成并发布解决方案。 有关如何发布解决方案的更多信息,请参见 如何:使用发布向导发布 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 命令提示的更多信息,请参见 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

    您不必使用中描述的名称或目录位置顶部。中描述的名称和位置上面仅用于声明需要的步骤发布解决方案。

  2. 在命令提示,请更改路径到包含发布应用程序文件的最新版本的内容。 下面的示例演示此步骤。

    cd "%UserProfile%\Documents\Visual Studio 2010\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 – passwordPassword)。

  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 – passwordPassword。

在执行这些步骤之后,可以将发布文件您希望最终用户安装应用程序的位置。 如果您打算经常更新解决方案,则您可以将这些命令脚本和每次运行该脚本您发布新版本。

请参见

参考

Enabling Visual Styles

Visual Studio 和 Windows SDK 命令提示

概念

ClickOnce 部署中的特定错误的疑难解答

其他资源

Visual Styles Overview