但是.net版本众多。而且.NET Framework框架很大。拖着一个大大的.net Framework总是让人很郁闷。

在网上找呀找呀。找到另一个.NET Framework 替代方案。Mono。

Mono2.10.2版本支持.net 2.0至4.0版本。

算了,既然安装了。找找资料吧。

Mono运行C#程序所要的库资源其实不多。

WinForm程序只要这5个库就行了。

每个库文件下,又有自己的.net版本号。如果用的是.net 2.0那么4.0.0.0那个目录就可以删除,如果你想问为什么没有3.0、3.5的库。答案是3.0和3.5用的是2.0的库。而1.0的库由于年代久远,Mono2已经不支持了。如果需要的话,可以下载Mono早期的版本。

另外我发现库文件下,有同名的.mdb文件。

那个.mdb文件删除掉对程序没什么影响。所以通通删除掉。

经过层层删除,最后剩下的那几个文件,加起来也就8M多点。而程序一点问题也没有。完美运行!

发行软件的时候用RAR压缩一下,程序只有3M多。很完美了!

可是我怎么知道。。我的程序具体要用到哪些库呢?

答案是:不知道。去记程序要用到哪些库太累了。我才不会去记呢。我有一个偷懒的办法。新建一个文件夹,先将不变的文件放好。bin目录下的mono.exe,mono-2.0.dll,lib\mono\.net版本号\mscorlib.dll。最后将Mono下lib\mono\gac中所有的库文件拷贝过来。运行编译好的C#程序。现在可以开始疯狂的删除了,碰到不能删除的文件,剩下的就是我们的程序要用的库了。此方法简单高效,百试不爽。

但是接下来还有个问题,Mono那个讨厌的命令行。还有如果人家电脑上装了.net库呢?用MS自家的.net不是更好么?于是我参考Mono官网,用C和windows api写了一个.net的引导程序。可以根据用设定来选择.net版本,如果客户电脑已经安装用户指定版本,则优先使用MS的.net,如果不存在则用Mono引导程序。

这个引导程序使用config.ini做为配置文件。

C#_Version=2.0                    //.net版本号,共有4个值:2.0、3.5、4.0C、4.0F

C#_AppName=MyBooks.exe   //预启动的应用程序名称

这个引导程序,在32位XP下使用VS 2008编译。因为是用windows api编写,没有额外的库。所以理论上32位的系统应当都能使用,64位的没试过。这个引导程序测试.net 2.0项目和.net 4.0项目都没问题。这个程序直接调用了mono-2.0.dll。所以Mono.exe也就没用了。下面给出我的测试项目,直接运行monologin.exe即可。效果我还是很满意的。同时欢迎交流!

附件下载:
c#引导项目.rar 3.17MB

转自:http://dws.iteye.com/blog/1168195

转 让NET C# 程序独立运行(脱离 .NET Framework运行,绿色运行) 未验证的更多相关文章

  1. 使用Mono Runtime Bundle制作安装包让C#桌面应用程序脱离net framework

    在Xamain 未被收购之前,这货monodroid.exe  就是一个打包的绑定...无奈 配置环境复杂,未能实现 ...有mono运行时就行了..不折腾了 玛德 让C#程序独立运行(脱离 .NET ...

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

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

  3. 【Abode Air程序开发】Flex air文件打包和运行

    1 安装Adobe AIR 运行时,和java的JVM类似. Adobe AIR 运行时允许在桌面运行AIR应用程序,脱离游览器的束缚. 下载安装文件http://get.adobe.com/cn/a ...

  4. 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行

    今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序. 可以在eclipse写好程序,export或用fatjar打包成jar文件. 先给出这个程序所依赖的Mave ...

  5. 应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户

    这是安装biztalk server 2013出现的问题,很多天了没解决,下边这个解决办法也搜到过类似的,但上次实验时出现设置组件权限时发现都是按钮都是灰的,无法操作. 这次设置好了.谢谢ibg. 文 ...

  6. 程序日志-应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-18)授予针对 CLSID 为 {D63B10C5-BB46-4990-A94F-E40B9D520

    应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYSTEM SID (S-1-5-1 ...

  7. 2019-8-31-dotnet-判断程序当前使用管理员运行降低权使用普通权限运行

    title author date CreateTime categories dotnet 判断程序当前使用管理员运行降低权使用普通权限运行 lindexi 2019-08-31 16:55:58 ...

  8. NanoPi arm架构下的程序 ./ 运行黑屏 Qt环境可运行

    首先之所以QtCreator环境下可直接运行,但是在终端下 ./ 则不能运行(黑屏但是不报错),判断肯定不是程序或者是库的问题.于是猜想是环境问题,即终端环境与QtCreator环境不同. 然后就查看 ...

  9. 应用程序-特定 权限设置并未向在应用程序容器不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户...的 COM 服务器应用程序的 本地 激活 权限。此安全权限可以使用组件服务管理工具进行修改。

    很久以前发现我们的业务服务器上出现一个System的系统严重错误,查找很久都没有找到解决办法,今日再次查看服务器发现报错更频繁,于是就搜集各种资料进行查找解决办法,终于找到了一个解决办法. 错误截图介 ...

随机推荐

  1. python3 报错UnicodeEncodeError

    在ubuntu执行python3的时候,出现 UnicodeEncodeError: 'latin-1' codec can't encode characters in position 10-18 ...

  2. Linux+Apache环境下安装SSL证书

    一.安装证书 (温馨提示:安装证书前请先备份您需要修改的服务器配置文件) 1.确认证书文件及证书路径.  例证书文件为:zzidc.com.jks,放置目录为Tomcat的conf目录下.  2.配置 ...

  3. 新版本Mariadb安装后相关问题的解决

    给新机器Ubuntu安装的Mariadb后无法登录,通过网上各种方法修改root用户密码,仍然无法解决,耗费几个小时! 经过看日志和查手册,发现原因如下: ubuntu确实安装没有启用root用户,所 ...

  4. 配置docker阿里云加速器

    1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通 ...

  5. 循环(for,while,until)与循环控制符(break,continue)

    一.for循环 第一种风格   for ((;;;))(类似C语言风格) do command done 例子:for ((i=0;i<10;i++)) do echo $i done 第二种风 ...

  6. 团队作业-Alpha(3/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  7. 去掉 vue 的 "You are running Vue in development mode" 提示

    去掉 vue 的 "You are running Vue in development mode" 提示 在项目的 main.js 中已经配置了 Vue.config.produ ...

  8. typescript - 1.环境搭建

    安装 1.安装node.js 安装typescript npm install -g typescript 3.编译 tsc helloworld.ts Typescript开发工具Vscode自动编 ...

  9. pytorch visdom可视化工具学习—3-命令行操作使用经验

    在使用过程中一直以为要在哪个指定的environment下(即参数env)绘制内容,就必须在使用时声明 比如如果不声明,默认的就是在'main'环境下,端口为8097: viz = visdom.Vi ...

  10. Qt编写安防视频监控系统13-视频存储

    一.前言 一般视频监控行业都会选择把视频存储在本地NVR或者服务器上,而不是存储在客户端电脑,只有当用户经费预算有限的时候,或者用户特殊需求要求存储在本地客户端电脑的时候才会开启存储到本地,正常来说视 ...