Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 8.4 部署与发布

8.4 部署与发布

概述

WPF应用程序的部署与发布是开发流程的最后关键步骤。本节将详细介绍从生成可执行文件到最终分发的完整流程,包括多种部署方式的比较与选择、依赖项管理以及安装程序的制作。

部署方式对比

1. ClickOnce部署

  • 特点:
    • 支持自动更新和版本控制
    • 无需管理员权限
    • 通过网页或网络共享分发
  • 适用场景:
    • 企业内部应用
    • 需要频繁更新的工具类软件
<!-- ClickOnce发布示例配置 -->
<PropertyGroup>
  <PublishUrl>http://server/app/</PublishUrl>
  <InstallUrl>http://server/app/</InstallUrl>
  <ProductName>MyWPFApp</ProductName>
  <PublishVersion>1.0.0</PublishVersion>
</PropertyGroup>

2. MSI安装包

  • 优势:
    • 支持自定义安装路径
    • 可注册COM组件
    • 支持系统级安装
  • 工具推荐:
    • WiX Toolset(开源)
    • InstallShield(商业)

3. 独立部署(Self-contained)

  • 特点:
    • 包含.NET运行时
    • 单文件发布选项
    • 体积较大但兼容性好
# 发布命令示例
dotnet publish -c Release -r win-x64 --self-contained true

依赖项管理

关键检查项

  1. .NET Framework版本兼容性
  2. VC++运行时库(如使用C++组件)
  3. 第三方DLL的部署位置
  4. 配置文件(App.config)的包含

解决方案

<!-- 项目文件中的依赖项配置 -->
<ItemGroup>
  <Content Include="libs\thirdparty.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

安装程序制作实战

使用WiX创建MSI

  1. 安装WiX Toolset扩展
  2. 创建.wxs项目文件
  3. 定义组件和文件结构
  4. 添加注册表项和快捷方式
<!-- WiX示例片段 -->
<Component Id="MainExecutable" Guid="*">
  <File Source="$(var.MyApp.TargetPath)" KeyPath="yes"/>
  <Shortcut Id="StartMenuShortcut" Directory="ProgramMenuFolder" 
            Name="My App" WorkingDirectory="INSTALLFOLDER"/>
</Component>

数字签名与安全

  • 必要性:避免安全警告,建立用户信任
  • 工具链:
    • SignTool(Windows SDK)
    • Let's Encrypt(免费证书)
    • DigiCert(商业证书)
# 签名命令示例
signtool sign /fd SHA256 /a /tr http://timestamp.digicert.com /td SHA256 /f cert.pfx /p password app.exe

版本更新策略

更新方式实现方法适用场景
自动更新使用AutoUpdater.NET等库消费者应用
手动下载安装包版本检测+下载链接企业环境
应用内更新通过Web API检查版本并下载补丁专业软件

常见问题排查

  1. 缺失DLL错误

    • 解决方案:使用Dependency Walker检查依赖链
  2. 权限不足

    • 方案:在清单文件中请求管理员权限
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
    
  3. 启动崩溃(无错误提示)

    • 调试方法:
      • 查看Windows事件查看器
      • 添加全局异常处理
      AppDomain.CurrentDomain.UnhandledException += (s, e) => 
          File.WriteAllText("crash.log", e.ExceptionObject.ToString());
      

最佳实践清单

  • [ ] 测试在干净虚拟机上的安装
  • [ ] 验证卸载流程是否完整
  • [ ] 准备回滚方案
  • [ ] 更新文档中的系统要求
  • [ ] 检查多语言支持(如有)

专家提示:对于企业级应用,建议建立完整的部署流水线(CI/CD),将打包和签名过程自动化。

Last Updated:: 5/3/25, 10:42 PM