posts - 187,  comments - 1158,  trackbacks - 6
大家都知道NAnt是个好东西,但也知道写NAnt的build文件是件很痛苦的事情,有什么办法能减轻这种痛苦呢,下面就介绍一个简单的程序,利用XSL把Visual Studio.NET的C#,VB.NET,VC++.NET的project文件转为NAnt的Build文件。
这个程序使用非常简单,选择一个project文件,转换,告诉存放路径,成功。

/Files/hardrock/Prj2Nant1.0.1.zip

posted on 2005-08-31 16:54 RubyPDF 阅读(3063) 评论(21)  编辑 收藏

FeedBack:
2005-08-31 17:02 | 灵感之源的Smart Forge智能工厂      
出处?
  回复  引用  查看    
2005-08-31 20:00 | 吕震宇      
用Reflactor反编译了一下,发现很有意思。命名空间是netz,类名NetzStarter。还有一个非常有意思的东西:作者将一个zip.dll转换成一个byte[]并且存入程序的resource中,在运行时从resource中解出该dll并载入:

private static Assembly LoadZipDll()
{
Assembly assembly1 = null;
try
{
byte[] buffer1 = NetzStarter.GetResource("zip.dll");
if (buffer1 == null)
{
return null;
}
MemoryStream stream1 = new MemoryStream(buffer1);
assembly1 = Assembly.Load(stream1.ToArray());
}
catch
{
assembly1 = null;
}
return assembly1;
}

很有意思。

研究中...
  回复  引用  查看    
2005-08-31 20:05 | 吕震宇      
精心设计的加密手段:

private static Assembly GetAssembly(byte[] data)
{
MemoryStream stream1 = null;
Assembly assembly1 = null;
try
{
stream1 = NetzStarter.UnZip(data);
assembly1 = Assembly.Load(stream1.ToArray());
}
finally
{
if (stream1 != null)
{
stream1.Close();
}
}
return assembly1;
}

不但将关键部件以二进制形式加入resource中,还进行了压缩。用心良苦呀。不过还应当有办法破解的。
  回复  引用  查看    
#4楼 [楼主]
2005-08-31 20:33 | HardRock      
我本来就是打算公布源代码的,既然你这么有兴趣,那就由你破解后公布好了。
至于用心良苦就谈不上了,xsl部分我是以embeded resource的方式加入程序的,只是为了学习XmlTextReader的一个方法而已。至于netz不过是codeproject上介绍的一个类似upx的压缩工具罢了,只是觉得好玩,如果真的想加密的话,我到愿意尝试下MaxtoCode 的效果了。
  回复  引用  查看    
2005-08-31 21:24 | 灵感之源      
原来是作者的大作。
  回复  引用  查看    
#6楼 [楼主]
2005-08-31 22:38 | HardRock      
哪里,不过拼凑来的罢了,呵呵
  回复  引用  查看    
2005-09-01 09:54 | 灵感之源的Smart Forge智能工厂      
如果真有心开源,建议放到sf上
  回复  引用  查看    
#8楼 [楼主]
2005-09-01 10:07 | HardRock      
谢谢你的建议,我在测试另外一部分,就是解析和修改NAnt Build文件呢,打算合并到一起,不过我不一定有时间,我现在都是早上花时间做自己的事情,另外还要研究iTextSharp的html到PDF的实现。
  回复  引用  查看    
2005-09-01 11:28 | Cavingdeep      
Hi,

如果要继续改进的话,建议提供模板功能,也就是我可以提供自己的NAnt脚本模板,然后用你的引擎将VS.NET的信息插进去。^_^

我最近正在做DCG2.0的plan,它是一个动态代码生成器+模板语言,我想等它release了也可以尝试一下转换VS 2005的:) 不过VS 2005似乎就不需要了:D。不过说实话,VS.NET的project信息不足以制作NAnt脚本:)
  回复  引用  查看    
#10楼 [楼主]
2005-09-01 12:30 | HardRock      
你的主意不错,
的确 把VS.NET转NANT,只是获得一些最基本的信息,很多东西需要增加进去的,这主要是搜集一些常用的代码或者模板做些拼接,或者索性对Project编译部分只是一个简单的功能罢了。
  回复  引用  查看    
2005-09-03 09:28 | yyanghhong [未注册用户]
NANT 提供了一个task叫solution, 用它就可以直接编译vs的项目

http://nant.sourceforge.net/release/latest/help/tasks/solution.html
  回复  引用    
#12楼 [楼主]
2005-09-03 09:42 | HardRock      
看来这个工程已经没有存在的必要了。
  回复  引用  查看    
2006-03-27 16:56 | mailtome [未注册用户]
我在编译web程序的时候碰到了这样的问题,希望能得到大家的帮助:
[csc] d:\DayBuildTools\nant2\MyTestProjGroup\source\Socket\SocketWeb\Default.aspx.cs(24,39): error CS0117: “_Default”并不包含“txtRequestURL”的定义
[csc] d:\DayBuildTools\nant2\MyTestProjGroup\source\Socket\SocketWeb\Default.aspx.cs(47,34): warning CS0618: “System.Net.Dns.Resolve(string)”已过时:“Resolve is obsoleted for this type, please use GetHostEntry instead. http://go.microsoft.com/fwlink/?linkid=14202
[csc] d:\DayBuildTools\nant2\MyTestProjGroup\source\Socket\SocketWeb\Default.aspx.cs(75,22): error CS0117: “_Default”并不包含“txtMessage”的定义
cs文件中找不到页面中涉及的参数。
我的Build文件如下:
<?xml version="1.0"?>
<project name="Project" default="build">
<description>Product 2.4 Release Build file for NAnt. By Chagel@gmail.com </description>
<property name="verbose" value="true"/>
<property name="nant.settings.currentframework" value="net-2.0" />
<property name="build.root" value="D:\DayBuildTools\nant2" />
<property name="folder.build.web" value="MyTestProjGroup\source\Socket\SocketWeb" />

<!--// Compile the sources -->
<target name="build">
<echo message="${build.root}\${folder.build.web}"/>
<csc target="library" output="${build.root}\${folder.build.web}\Build\ES24.dll" rebuild="true" define="NET,NET_2_0">
<nowarn>
<warning number="0168" />
<warning number="0219" />
</nowarn>
<sources>
<include name="${build.root}\${folder.build.web}\*.cs"/>
</sources>
<references basedir="${build.root}/${folder.build.web}">
<include name="System.dll" />
<include name="System.Data.dll" />
<include name="System.Configuration"/>
<include name="System.Web.dll" />
<include name="System.Web.Security.dll" />
<include name="System.Web.UI.dll" />
<include name="System.Web.UI.WebControls.dll" />
<include name="System.Web.UI.HtmlControls.dll" />
<include name="System.Text.dll" />
<include name="System.Net.dll" />
<include name="System.Net.Sockets.dll" />
<include name="System.Threading.dll" />
</references>
</csc>
</target>
</project>

  回复  引用    
2006-06-07 06:42 | Taylor [未注册用户]
HI can you send me the source code of the tool? It's looks very interesting, I'd like to take some time to look into it~. I am an university student~

Thanks~

My email Address is:

cheng.yang@uleth.ca

I would not let other people see the code, after I read it I will delete it right away.

Many thanks

Taylor
  回复  引用    
2006-08-09 09:44 | mgt [未注册用户]
我在使用时生成的一个build文件后,编辑时出现“[csc] fatal error cs2008:未指定输入”的错误,在“<csc target="${target.type}" output="${dir.output}\${project.output}" debug="${debug}" define="${define}" doc="${doc}">”这一行出现问题,请问是怎么回事?
  回复  引用    
#17楼 [楼主]
2006-08-09 09:49 | HardRock      
@mgt

很抱歉,这个程序现在已经没有多少价值了,源代码已经丢失,我无法继续更新和维护了。
  回复  引用  查看    
2006-08-09 10:23 | mgt [未注册用户]
哦,谢谢你提供的程序!
  回复  引用    
2006-08-14 16:22 | mgt [未注册用户]
我想问一下:怎么用build文件来生成一个.msi的安装包呢?能说一下大体的步骤吗?谢谢了!
  回复  引用    
2007-06-12 21:59 | rtfsc [未注册用户]
想請問各位NAnt的高手,是否有下列的經驗,我找了好久,但是依然沒有得到理想的答案,所以向各位高手指教。

目標是使用NAnt在vs2005的環境下,可以對vs2005的web site project進行build,我不知道是否有這樣的Task存在,因為vs2005的編譯模式使用MSBuild呼叫aspnet_compiler.exe進行編譯,與vs2003使用csc.exe完全不同,所以之前的<solution>Task已經無法使用。難道要自己寫一個MSBuild的Wrapper Task,這真的讓我很頭痛。

而且,VS2005又有pre-compilation機制,compile mode有in place與for deployment 2 種模式,NAnt如何和這些機制整合呢?

另外,vs2005有另外一種web application project(也就是與vs 2003相似的web專案開發與編譯模式),是不是使用這種web application project就可以用<solution>Task了,希望有試過的人指點迷津。

最後,是另外一個頭痛的問題,NDoc不支援.NET 2.0,須使用SandCastle來產生程式碼注釋文件,NAnt好像也還不支援SandCastle,有沒有人試過呢?

其實,我最終的目標是希望能夠將整個開發的流程達到auto-build的效果,也就是從VSS取得Source Code(只取包含在專案中的檔案,所以必須依靠project file 的 metadata),取得之後根據release/debug等相關屬性來編譯一個solution下的所有projects(或只編譯指定的幾個projects),編譯成功之後建立IIS站台或虛擬目錄,將編譯成功後的所有檔案部署到web的實際硬盤目錄,然後呼叫SandCastle產生程式碼幫助文檔,接著呼叫NUnit做單元測試,最後完成整個auto-build的流程。但是使用vs2005到現在,我在網路上還沒有看到一個完整的auto-build解決方案(也許是我的努力不夠?),希望對.Net Open Source有相當研究的各位前輩能提供指引方針,哪怕只是一點蛛絲馬跡,相信一定會有幫助的,謝謝。
  回复  引用    
2007-12-04 11:38 | quyi [未注册用户]
@rtfsc
可以尝试使用CruiseControl.net,最近正在学习,一起研究啊
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-09-09 06:46 编辑过


相关链接:
 



<2005年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

与我联系

搜索

 

常用链接

我参与的团队

我的标签

随笔分类(162)

PDF

最新随笔

积分与排名

  • 积分 - 375588
  • 排名 - 60

最新评论

阅读排行榜

评论排行榜