C# 将dll打包到exe中有效方式暨.net程序自动更新有效方式

简介: 本文目录1. 背景2. 思路3. 实现

1. 背景

近期因工作需要,需要制作一个exe应用程序,基于win form开发的,引用了一堆dll文件,之前都是用ILMerge打包一两个dll文件来用的,结果这次死活不行啊。


然后开始了折腾之旅:


折腾1:百度了ILMerge各种问题解决方案尝试后,总结:ILMerge不可靠、不稳定。


折腾2:使用windows安装程序InstallShield,后来放弃了,原因一是不够简洁明了,二是界面竟然是英文的不能忍我们公司很多不会英文的好不好,三是需要注册,试用版还提示是个评估版本,最后也不支持更新功能不够强大。舍弃之。


折腾3,然后又试了几种打包方法,什么作为静态资源啦、什么nuget下的项目构建枸橘啦,都不行。


最后,还得靠自己,光脚的不能怕穿鞋的。


2. 思路

之前写过一个带自动更新的程序,原理就是加了一个启动器,启动器的作用如下:


1,启动器只负责联网、检查更新、下载。

2,如果发现联网失败,则使用之前下载的版本。

3,如果联网成功,检查版本为最新,则直接运行。

4,如果联网成功,检查版本不为最新,则先更新后运行。


我们完全可以这样实现dll打包:


1,我们发布的程序是一个启动器,实际上是一个单独的小程序,只具备联网和下载的功能,而这两个功能.net framework2.0就有了,无需dll。

2,该程序启动后自动下载真正的exe应用和相关的dll文件,然后放到一个目录中(类似于程序安装的过程)。

3,下载完毕后运行exe应用,同时每次启动时还可以检查和更新。


3. 实现

原理说的很明白了,需要源码的留言我再去整理下,现在版本更新用的MD5+XML+Web Service,跟本文主题相关度不高,还需要抽离出相关内容形成代码。

相关文章
|
3月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
182 10
|
2月前
|
缓存 C# Windows
C#程序如何编译成Native代码
【10月更文挑战第15天】在C#中,可以通过.NET Native和第三方工具(如Ngen.exe)将程序编译成Native代码,以提升性能和启动速度。.NET Native适用于UWP应用,而Ngen.exe则通过预编译托管程序集为本地机器代码来加速启动。不过,这些方法也可能增加编译时间和部署复杂度。
169 2
|
21天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
74 13
|
2月前
|
C# Windows
C#实现指南:将文件夹与exe合并为一个exe
C#实现指南:将文件夹与exe合并为一个exe
187 9
|
2月前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
231 0
|
2月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
122 0
|
3月前
|
C# 容器
C#中的命名空间与程序集管理
在C#编程中,`命名空间`和`程序集`是组织代码的关键概念,有助于提高代码的可维护性和复用性。本文从基础入手,详细解释了命名空间的逻辑组织方式及其基本语法,展示了如何使用`using`指令访问其他命名空间中的类型,并提供了常见问题的解决方案。接着介绍了程序集这一.NET框架的基本单位,包括其创建、引用及高级特性如强名称和延迟加载等。通过具体示例,展示了如何创建和使用自定义程序集,并提出了针对版本不匹配和性能问题的有效策略。理解并善用这些概念,能显著提升开发效率和代码质量。
139 4
|
2月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
79 0
|
2月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
139 0
|
3月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
114 2