如何用NAnt管理单文件程序仓库
因为学习C#各种特性和使用方法的需要,常常会编写和收集一些例子代码。一段时间之后,这种代码的数量就增加到无法通过简单粗暴的方式进行管理了。采用NAnt进行管理是一个不错的选择,虽然部分特性只有MSBuild才支持,基于偏好选择NAnt。
首先是一个顶层目录下的配置文件。
<?xml version="1.0"?>
<project name="hycs project" default="build">
<target name="*">
<nant target="${target::get-current-target()}">
<buildfiles>
<include name="**/*.build" />
<!-- avoid recursive execution of current build file -->
<exclude name="${project::get-buildfile-path()}" />
</buildfiles>
</nant>
</target>
</project>
这个文件的功能就是提供搜索子目录下的build配置文件,并根据命令行指定的目标来执行操作。为了避免出现死循环,加上了 exclude 命令。
对于诸多小文件的目录,采用每个源码文件编译成一个可执行程序的策略。最开始没有采用通配的方法,直接针对每个文件写命令。
<?xml version="1.0"?>
<project name="Math" default="run">
<property name="debug" value="true" />
<target name="clean" description="remove all generated files">
<!-- Files: '*.xml; *.pdb' -->
<delete>
<fileset>
<include name="*.xml" />
<include name="*.exe" />
</fileset>
</delete>
<delete file="oledb.exe" />
</target>
<target name="build" description="compiles the source code">
<csc debug="${debug}" output="helloMath.exe" target="exe" win32icon="..\ico\triple.ico">
<sources>
<include name="helloMath.cs" />
</sources>
</csc>
</target>
<target name="run" depends="build">
<exec program="helloMath.exe" />
</target>
</project>
文件数量增加后,写命令的工作量就变得惊人了。想想办法,如何才能多快好省呢?
<?xml version="1.0"?>
<project name="xml" default="run">
<property name="debug" value="true" />
<target name="clean" description="remove all generated files">
<!-- Files: '*.xml; *.pdb' -->
<delete>
<fileset>
<include name="*.xml" />
<include name="*.exe" />
<include name="*.pdb" />
</fileset>
</delete>
</target>
<target name="build" description="compiles the source code">
<foreach item="File" property="filename">
<in>
<items>
<include name="*.cs" />
</items>
</in>
<do>
<echo message="${filename}" />
<csc debug="${debug}" output="${path::change-extension(filename, 'exe')}" target="exe">
<sources>
<include name="${filename}" />
</sources>
</csc>
</do>
</foreach>
</target>
<target name="run" depends="build">
<foreach item="File" property="filename">
<in>
<items>
<include name="*.exe" />
</items>
</in>
<do>
<echo message="${filename}" />
<exec program="${filename}" />
</do>
</foreach>
</target>
</project>
现在每个文件都能进行编译了。就算增加更多的文件,也不需要修改配置文件。暂时就到这里,之后还会遇到其他的问题,比如DLL如何处理,C/C++代码如何处理,第三方库文件如何处理等等,待有时间慢慢道来。
如何用NAnt管理单文件程序仓库的更多相关文章
- 利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)
原文:利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe) 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了.这 ...
- .NET5.0 单文件发布打包操作深度剖析
.NET5.0 单文件发布打包操作深度剖析 前言 随着 .NET5.0 Preview 8 的发布,许多新功能正在被社区成员一一探索:这其中就包含了"单文件发布"这个炫酷的功能,实 ...
- 发布 .NET 5 带运行时单文件应用时优化文件体积的方法
自 .NET 发布起,.NET Framework 运行环境就是其摆脱不掉的桎梏.后来有了 .NET Core ,微软终于将自带运行时和单文件程序带给了我们.即便如此,大部分情况下开发者仍然不太满意: ...
- 开源作品-PHP写的Redis管理工具(单文件绿色版)-SuRedisAdmin_PHP_1_0
前言:项目开发用到了Redis,但是在调试Redis数据的时候,没有一款通用的可视化管理工具.在网络找了一些,但是感觉功能上都不尽人意,于是决定抽出一点时间,开发一个用起来顺手的Redis管理工具.秉 ...
- 360随身WIFI程序单文件绿色版及网卡驱动(附使用感受)
大家好,我是Colin,今天刚收到传说中的360WIFI,拿到手后马上就进行了测试.就做工而言,19.9的价格算是比较公道的,网卡很小,做工还可以,带磨砂质感,而且还提供了一个耳机插头,可以当挂件一样 ...
- [原创] 绿色单文件封装程序GreenOne V3.0
1.原理 将包含可执行文件的多个文件 调用Winrar,创建自解压格式压缩文件 设置高级自解压选项中的文本和图标,设置解压后运行的文件为选中的可执行文件. 这种创建单文件封装其实也就是一个Winrar ...
- AOT和单文件发布对程序性能的影响
前言 这里先和大家介绍一下.NET一些发布的历史,以前的.NET框架原生并不支持最终编译结果的单文件发布(需要依赖第三方工具),我这里新建了一个简单的ASP.NET Core项目,发布以后的目录就会像 ...
- 微信小程序接口请求/form-data/单文件、多文件上传
1.普通的微信请求封装 1 const http = (options) =>{ 2 return new Promise((resolve,reject) => { 3 wx.reque ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
随机推荐
- subprocess 子进程模块
subprocess子进程模块 import subprocess #Popen方法是用来执行系统命令的,直接把结果打印到终端了 res =subprocess.Popen(r'dir',shell= ...
- 如何设置Java虚拟机JVM启动内存参数
Tomcat默认的Java虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在服务器的强大内存,所以要设置Java虚拟机JVM启动内存参数.具体设置方法为: Tomcat修 ...
- 【BZOJ5138】[Usaco2017 Dec]Push a Box(强连通分量)
[BZOJ5138][Usaco2017 Dec]Push a Box(强连通分量) 题面 BZOJ 洛谷 题解 这题是今天看到萝卜在做然后他一眼秒了,我太菜了不会做,所以就来做做. 首先看完题目,是 ...
- 【bzoj3489】 A simple rmq problem
http://www.lydsy.com/JudgeOnline/problem.php?id=3489 (题目链接) 题意 在线求区间不重复出现的最大的数. Solution KDtree竟然能够处 ...
- Cocos2d-x 3.2 打包Android平台APK
(转自:http://www.cnblogs.com/Richard-Core/p/3855130.html) 从cocos2dx 3.2项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭 ...
- oracle 查询重复数据并且删除, 只保留一条数据
数据库操作中,经常会因为导数据造成数据重复,需要进行数据清理,去掉冗余的数据,只保留正确的数据 一:重复数据根据单个字段进行判断 1.首先,查询表中多余的数据,由关键字段(name)来查询. sele ...
- npm 设置地址
-- 查看当前地址: npm config get registry https://registry.npmjs.org/ npm config get disturl undefined -- 设 ...
- PHP内核-环境搭建(一)
难得闲下来,发现自己没有系统的学习过PHP内核,希望我能够慢慢啃下PHP内核书籍,无论是抄袭也好,码字也好,一步一个脚印走下去. 学习来源:http://www.php-internals.com/b ...
- duilib bkimage 属性
duilib bkimage 属性<Attribute name="bkimage" default="" type="STRING" ...
- sublime代码对齐
来源于:Sublime 自动缩进怎么设置? - 郭缔的回答 - 知乎 https://www.zhihu.com/question/22987174/answer/90874465 { "k ...