如何用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在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
随机推荐
- 深入理解ajax系列第八篇——表单提交
前面的话 在以前,网站的用户与后端交互的主要方式是通过HTML表单的使用.表单的引入在1993年,由于其简单性和易用性,直到电子商务出现之前一直保持着重要位置.理解表单提交,对于更深入地理解ajax是 ...
- MT【199】映射的个数
(2018中科大自招)设$S=\{1,2,3,4,5\}$则满足$f(f(x))=x$的映射:$S \longrightarrow S$的个数____解答:由于$a\ne b$时必须满足$f(a)=b ...
- BZOJ 2668 [cqoi2012]交换棋子 | 最小费用最大流
传送门 BZOJ 2668 题解 同时分别限制流入和流出次数,所以把一个点拆成三个:入点in(x).中间点mi(x).出点ou(x). 如果一个格子x在初始状态是黑点,则连(S, mi(x), 1, ...
- bzoj1345 序列问题 (贪心)
考虑某个点产生的贡献: 如果i左边是一个比它小的数x,那有两种情况: 1.x的左边的数y大于i,肯定要把x合并到i,i的贡献++ 2.x的左边的数y小于i,那肯定要把x合并到y,而这时候递归地来考虑, ...
- springboot通过ssh通道连接mysql数据库
navicat可以通过ssh通道连接mysql数据库,那java中如何实现了,springboot又该怎样集成呢? 1.添加包 <dependency> <groupId>co ...
- DataTables合并单元格(rowspan)的实现思路(多分组分类的情况)
直接上代码,原理之前的随笔已经讲过了.http://www.cnblogs.com/hdwang/p/7115835.html 1.先看看效果 2.html代码,含js代码 2.1 common.js ...
- 【CSS】float属性
float浮动属性1.作用: 将页面元素浮动起来,使其能够向左或者向右排列 2.应用: 实现页面中布局的左右排版 实现图文环绕的版式效果 3.值: 4.原理: 浮动元素将脱离默认的文档流,漂浮在默认文 ...
- JVM调优命令-jps
JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程. 命令格式 1 jps [options] [hostid] options参数-l : 输出主类全名或j ...
- Intellij-idea 如何编译maven工程
小编最近效应项目的要求,学习在idea上编写项目.作为一个新手遇到问题也算是正常的,重要的是把它解决,get新技能. 编写过maven工程的小伙伴们应该都知道怎么在eclipse中编译maven工程: ...
- <header><footer>引用
示例:http://www.w3school.com.cn/html/html_layout.asp