MONO 如何打包 .NET程序独立运行(winform篇)

简介: .NET程序独立运行是指运行.NET的电脑上,不需要安装.NET框架。 .NET程序集“独立运行”并非真正的独立,它是运行在mono运行时基础之上的。由于这个运行时可以独立存在,所以,我们不需要在目标机上安装.NET框架。

.NET程序独立运行是指运行.NET的电脑上,不需要安装.NET框架。

.NET程序集“独立运行”并非真正的独立,它是运行在mono运行时基础之上的。由于这个运行时可以独立存在,所以,我们不需要在目标机上安装.NET框架。

 

 

如上图:

 

一,嵌入或未嵌入.NET程序集的用C/C++语言写的主程序,这个主程序负责对mono运行时进行操作。同时还可配合.NET完成其它的任务(比如提供函数供.NET使用);

 

二,mono.NET运行时,这是一个动态库文件(mono同时提供了静态库),是.NET程序集运行的关键条件。

 

三,MONO运行时的配置文件或文件夹(并不一定需要)。

 

四,外部的程序集没有嵌入到C程序中的其它的相关.NET程序集。

“独立运行”的过程是:

C语言通过mono提供的运行时api,调用mono运行时有关函数,通过mono运行时加载并运行.NET程序。

 

即:

C语言程序(your.exe) --à mono.NET运行时(libmonosgen-2.0.dll) --à .NET程序集

 

libmonosgen-2.0.dll,即是.NET程序集的运行条件,也是.NET程序集与C程序之间数据交流、函数互调的桥梁。

好了,有了以上的理论知识,下面我们就开始实践一下吧
 
1.使用Xbuid命令编译
 
2.把编译后的net 运行文件  写入到一个  char[] 变量中,并记下这个程序集的名称,大小
mkpack H:\Csharp\Mono\Test\TestBuild\TestBuild\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe
会生成3个文件
data.c 是.NET程序集的二进制内容
data_.c 是为了文件用户调用的针对data.c的函数和变量
data.h  是data_.c的头文件,是用户c源码必须的。
 
3. 将编译data.c编译为目标文件data.o
gcc -c -o data.o data.c
 
4. 将编译data_.c编译为目标文件data_.o
gcc -c -o data_.o data_.c -IC:/mono-3.2.3/include/mono-2.0
 
5. 将data.o和data_.o 合成为一个单一的静态库:data.a
ar rcs data.a data_.o data.o
 
6. 编译test.c和连接data.a,生成 test.exe
gcc -o output\test.exe test.c data.a %GCC_OPT% -lmonosgen-2.0
 
最后的成果如下
 
winform 最基本的 lib 有以下几个,添加到 lib\mono\gac 目录下。
 
运行试试,没有问题
 
那么最关心的事情来了。
这个文件打包了mono的.net 运行时,size有多大呢?
 
压缩一下
 
相比传统的打包.net 运行时 这应该是一个非常满意的尝试吧,结束!
 

编译后的程序:

 

 

如果大家觉得有需要,下篇文章我会写如何的配置 打包环境。


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,转载文章之后须在文章页面明显位置给出作者和原文连接,谢谢。
目录
相关文章
|
25天前
|
C#
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
|
3月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
155 10
|
6天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
47 13
|
19天前
|
前端开发 Android开发
WinForm 直接运行 Admin.NET
本文介绍了如何将 Admin.NET 以 WinForm 桌面程序模式运行,简化了手动配置 Web 服务的过程,便于演示和作为单机软件使用。通过添加特定 NuGet 包、修改 `Program.cs` 和 `Form1.cs` 文件,并调整项目配置,最终实现了在 WinForm 中嵌入 WebView 组件显示 Admin.NET 界面的效果。
19 0
WinForm 直接运行 Admin.NET
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
2月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
80 0
|
3月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
3月前
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
|
开发工具 Android开发 数据库
.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
原文:.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序 我不知道人们为什么那么喜欢用HelloWorld来做为自己的第一个程序入门,为什么不是hello **其他的东西或者hi。
945 0