Nant似乎非常以编译器为中心 - 这是因为它被认为是.NET开发系统.但我知道可以做到!我已经看到了它.我们正在构建的平台有自己的编译器,并且不使用'cl.exe'用于c ++.我们正在不同的平台上构建一个C++应用程序,并希望用我们自己的编译器覆盖.任何人都可以指出我的方法,或者至少如何设置我自己的目标,将使用我们的目标平台的编译器?
在.NET v1期间,我尝试使用NUnit和NAnt的其他工具来说服同事开发测试驱动和自动构建的工作习惯,但没有取得太大成功.当.NET Framework 2.0和Visual Studio 2005 Team Suite出现时,我能够"强迫"我的团队编写测试并在Visual Studio中为自己提供可视化测试.我还能够通过额外的MSBuild任务来调整项目文件,以实现更多的构建自动化.
当然,这并不意味着微软已经提供了完美的系统,但我相信他们已经采取了正确的步骤.所有这些功能都融入到框架和产品中并成为"原生",它使得动作开发人员更容易进入更好的开发实践.
很久以前就忘记了开源选项(我确实错过了),我想知道当前NUnit和NAnt的化身是什么价值主张?在这个阶段,人们可以争论说服团队不使用MSBuild或MSTest?
澄清:我的公司是一个纯粹的微软SI.Visual Studio Team Suite版本,Database Professional版本,TFS等可供我们使用.我们不使用Visual Studio Professional版本或更小版本.
我非常喜欢Nant.我用NAnt编写了很多脚本.这是一个很棒的小工具.
由于NAnt是1.0之前的,当出现问题时,我经常认为如果这是NAnt本身的问题,但情况并非总是如此.
一个有趣的例子:运行oracle脚本后,我解析了日志输出,以确保没有问题.我用一个小的日志文件测试它,它很好.
我使用该任务将文件内容加载到字符串属性并使用正则表达式来搜索错误.
当我将这个脚本用于大型日志文件时,我停止在底部收到"build failed"消息,因为我正在打印错误消息.
因为"构建失败"隐藏在顶部,我认为NAnt崩溃,但它工作正常.
NAnt最好有1.0版本.任何原因为什么不呢?
如何从属性文件中单独读取值.例如,如何从以下示例中读取build.home或temp.dir的值.
env.properties的内容
build.home=c:\build
temp.dir=c:\temp
Run Code Online (Sandbox Code Playgroud)
问候
Sarathy
当遇到错误时,我似乎无法让NAnt中止我的构建.这是许多sqlcmd.exe执行中的一个:
<property name="test" value=""/>
<exec program="sqlcmd.exe" resultproperty="test" failonerror="true"
basedir="${sqlcmd.dir}" commandline="${commandline.script}" verbose="true">
<arg value="${filename}" />
<arg value="-v databaseName="${Database.Name}"" />
</exec>
<echo message="Result: ${test}"/>
Run Code Online (Sandbox Code Playgroud)
当我执行此步骤时,由于(在这种情况下)缺少逗号,我最终会出现错误.这是输出:
[exec] Starting 'C:\...\sqlcmd.exe (-E -S (local) -e -d "Core"
-i "C:\...\Associations.sql" -v databaseName="Core")'
in 'C:\...\Scripts'
[exec] <snip - lots of SQL>
[exec] Msg 102, Level 15, State 1, Server <snip>, Line 7
[exec] Incorrect syntax near 'CreatedDate'.
[exec] Msg 319, Level 15, State 1, Server <snip>, Line 11
[exec] Incorrect syntax near the keyword 'with'. …Run Code Online (Sandbox Code Playgroud) 我们正在运行Cruise Control 1.5.7256.1并使用它来使用Nant和Nantcontrib进行构建.构建失败并正确成功,但是当它们失败时,相关的错误消息将显示在CCNet构建报告页面上.见下图

可以在"视图构建日志"页面上看到构建错误,但它们没有通过"构建报告"页面.构建本身非常简单,它只是一个构建.Net 3.5 .sln文件的Nantcontrib msbuild元素.
有任何想法吗?
在TeamCity中,有没有办法从构建配置中提取所有固定工件而不仅仅是最后一个固定构建?
编辑:感谢redsquares建议,我试图使用REST API与Nant解决这个问题.
我已经从获取固定版本更改为使用特定标记构建,因为这允许我根据需要配置多个列表.
我想我可以在Nant中使用get任务,如下所示,然后使用xmlpeek任务从xml文件中收集信息:
<get dest="tagged.xml" src="http://<teamcity_server>:1000/httpAuth/app/rest/buildTypes/id:bt103/builds?tag=release">
<proxy host="<teamcity_server>" port="1000">
<credentials username="uid" password="pwd"/>
</proxy>
</get>
Run Code Online (Sandbox Code Playgroud)
我很肯定uid和pwd是正确的.尽管如此,我仍然收到以下错误:
Unable to download 'http://<teamcity_server>:1000/httpAuth/app/rest
/buildTypes/id:bt101/builds?tag=release' to 'H:\<path>\tagged.xml'.
The remote server returned an error: (401) Unauthorized.
Run Code Online (Sandbox Code Playgroud)
Proxy任务配置错误吗?
我有一个当前的构建过程,它使用MSBuild进行.NET构建,然后我最终得到所有项目DLL/EXE和第三方DLL在同一目录中的子目录中的一些资源.
我想把这个包打包成一个MSI.我环顾四周,找到了WiX并且它没有任何可用的任务.但是,似乎我需要维护一个.wxs文件,其中包含对DLL完整列表的引用.我真的想避免手动维护这个文件或任何其他文件.
实际上我有许多使用共享构建脚本的项目,因此每个项目都以一致的方式构建.因此,我希望MSI步骤自动化,否则每个项目都必须使用当前DLL列表+任何资源文件维护.wxs文件.
是否可以使用WiX或其他任何工具,我可以将它指向一个目录并让它打包每个文件/子目录而不需要配置文件?