一个自动把Visual Studio.NET的C#,VB.NET,VC++project工程转为NAnt Build的小程序(利用XSL)

source:http://www.cnblogs.com/hardrock/archive/2005/08/31/227202.html
大家都知道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 阅读(3228) 评论(21)   编辑 收藏 网摘


FeedBack:
#1楼 
2005-08-31 17:02 | 灵感之源的Smart Forge智能工厂       
出处?
   回复   引用   查看     
#2楼 
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;
}

很有意思。

研究中...
   回复   引用   查看     
#3楼 
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 的效果了。
   回复   引用   查看     
#5楼 
2005-08-31 21:24 | 灵感之源       
原来是作者的大作。
   回复   引用   查看     
#6楼  [ 楼主]
2005-08-31 22:38 | HardRock       
哪里,不过拼凑来的罢了,呵呵
   回复   引用   查看     
#7楼 
2005-09-01 09:54 | 灵感之源的Smart Forge智能工厂       
如果真有心开源,建议放到sf上
   回复   引用   查看     
#8楼  [ 楼主]
2005-09-01 10:07 | HardRock       
谢谢你的建议,我在测试另外一部分,就是解析和修改NAnt Build文件呢,打算合并到一起,不过我不一定有时间,我现在都是早上花时间做自己的事情,另外还要研究iTextSharp的html到PDF的实现。
   回复   引用   查看     
#9楼 
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编译部分只是一个简单的功能罢了。
   回复   引用   查看     
#11楼 
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       
看来这个工程已经没有存在的必要了。
   回复   引用   查看     
#14楼 
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>

   回复   引用     
#15楼 
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
   回复   引用     
#16楼 
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

很抱歉,这个程序现在已经没有多少价值了,源代码已经丢失,我无法继续更新和维护了。
   回复   引用   查看     
#18楼 
2006-08-09 10:23 | mgt [未注册用户]
哦,谢谢你提供的程序!
   回复   引用     
#19楼 
2006-08-14 16:22 | mgt [未注册用户]
我想问一下:怎么用build文件来生成一个.msi的安装包呢?能说一下大体的步骤吗?谢谢了!
   回复   引用     
#20楼 
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有相當研究的各位前輩能提供指引方針,哪怕只是一點蛛絲馬跡,相信一定會有幫助的,謝謝。
   回复   引用     
#21楼 
2007-12-04 11:38 | quyi [未注册用户]
@rtfsc
可以尝试使用CruiseControl.net,最近正在学习,一起研究啊
   回复   引用     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值