在我工作的地方,我在不同的存储库中有几个项目.每个项目都分享了许多我想要引入不同项目的常用代码.我正在考虑使用以下方案调用该项目:Company.Department.Common或Company.Department.Utility.
我为此构建了一个项目,它有一个自动构建脚本(和其他项目一样).
我的问题是,我想重构我现有的项目,以取决于这个新项目.一个非常基本但不完全正在寻找的方法是简单地构建我的Utility项目,将DLL复制到我的消费项目中的lib文件夹,并检查该消耗项目中的DLL.
我个人觉得这种方法很差.我想引用我的Utility项目,并在构建消费项目之前执行svn-update和Build项目的构建.
仅供参考,Utlity项目中的代码类型包括Logging设施,BDD单元测试类,IoC faclities和Common Company.Department焦点类.
希望我的问题不是太模糊,但有了一些答案,我可能会把注意力集中在我想要做的事情上.
最后,这是针对.Net项目并使用NAnt作为构建脚本,并使用svn进行代码版本控制.
我们即将使用 NAnt 和 TFS 设置 Cruise control.net,我是否需要安装了团队资源管理器的 Visual Studio 2005/2008 或者我可以仅使用免费的团队资源管理器客户端来完成这项工作
美好的一天.
我正在尝试使用NAnt部署Web应用程序.它是使用NAnt ZIP任务进行当前压缩的.
我可以尝试从NAnt调用MSDeploy,但我不认为MSDeploy是为这样的部署编写的.
我也可以尝试使用NAnt任务.
有没有人建议哪种方法可以节省我最多的时间?
我正在为NAnt编写自定义任务.我一直在根据我在互联网上找到的一些例子编写代码,并查看NAnt和Ant的其他一些任务的来源.
话虽如此,是否有任何指导或最佳实践为NAnt,Ant或MSBuild等构建管理器编写好的任务?我正在寻找这样的异常处理和模块化(即如果我的任务与文件结构有关,我应该删除并重新创建我的任务的输出文件/目录,或以某种方式备份它,等等).
编辑:我正在寻找有关自定义任务创建的指南.如果我想为NUnit或Selenium创建自己的任务或者编译F#(我知道它们已经存在但只是说这些任务不在大多数构建管理器的原始核心中),那么编写我自己的任务的最佳实践是什么? .我对构建文件没有任何问题.只是看看编写新编译任务的指导.
谢谢
我正在使用nant来构建我们的产品并编写了一个自定义任务来通知我们的帮助台系统新的构建可用.
我已经使用nant来构建自定义任务,并将自定义nant任务程序集复制到nant文件夹中,以便自动加载.
我第一次运行构建时工作正常.
第二次运行构建时,复制任务失败,因为nant已加载自定义任务程序集并锁定了该文件.哎呀.
我怎样才能让它发挥作用?
我刚刚开始使用CruiseControl.NET和nAnt,并且对整个过程的工作原理并不十分了解.我们目前在Visual Source"Safe"中拥有大部分解决方案,并使用AssemblyInfo文件自动为每个版本生成构建服务器标签.
我们正在将我们的VSS项目迁移到SVN,并相应地修改了项目构建文件以检出并更新SVN存储库.我们想要实现的是在源代码控制中获得源代码的副本,该副本与正在部署的项目的版本完全匹配.
我们的SVN设置如下:
svn://solution/
TRUNK/
RELEASES/
1.0.0/
1.2.0/
BRANCHES/
Run Code Online (Sandbox Code Playgroud)
因此,当我们强制构建我们的解决方案时,其assemblyinfo版本设置为1.3.0,我们希望构建服务器将TRUNK目录复制到RELEASES/1.3.0 /目录中.
SVN命令相当简单.svn copy src/directory dst/directory.但是我会在哪里放置此命令,以及如何获取目标的版本号?
在构建服务器上,这是.xml文件的示例:
<sourcecontrol type="svn">
<trunkUrl>svn://project/trunk</trunkUrl>
<workingDirectory>D:\Builds\project\Src</workingDirectory>
<executable>C:\Subversion\bin\svn.exe</executable>
<username>sf_service_dev</username>
<password>SFx4vi-r</password>
<tagOnSuccess>true</tagOnSuccess>
<cleanCopy>true</cleanCopy>
</sourcecontrol>
Run Code Online (Sandbox Code Playgroud)
在项目.build文件中我们有这个(当然还有很多):
<target name="Deploy_Release">
<property name="fileandpathformyfile" value="${CCNetWorkingDirectory}\Bin\project.exe"/>
<echo message="fileandpathformyfile is ${fileandpathformyfile}."/>
<property name="ReleaseNumber" value="${fileversioninfo::get-file-version(fileversioninfo::get-version-info(fileandpathformyfile))}"/>
<echo message="ReleaseNumber has been detected to be ${ReleaseNumber}."/>
<!--Use version as needed-->
<!--Create the release direcory-->
<mkdir dir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"/>
<!--Copy stuff to the release directory-->
<copy todir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}">
<fileset basedir="${CCNetWorkingDirectory}\bin">
<include name="*.dll" />
<include name="*.exe" />
<include name="*.config" />
<include name="*.xml" /> …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何在nant中编写一个简单的if条件,当x和y属性都为真时,它将评估为true.
<project default="all">
<property name="x" value="True" />
<property name="y" value="True" />
<target name="all">
<echo message="x is True" if="${x}" />
<echo message="y is True" if="${x}" />
<echo message="x AND y are True" if="${x} AND ${y}" />
<echo message="x AND y are True" if="${x} && ${y}" />
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚x和y回显消息的语法 - 我尝试了AND和'&&'并且似乎不起作用.(我不断收到错误消息,如:String未被识别为有效的布尔值.)
我正在尝试检查目录是否作为NAnt脚本的一部分存在并获得误报.这是脚本片段:
<echo message="${backup.dir} --> ${directory::exists('${backup.dir}')}"/>
Run Code Online (Sandbox Code Playgroud)
这是输出:
[echo] D:\D\RTC\backup\20110223 --> False
Run Code Online (Sandbox Code Playgroud)
除了目录存在.
作为旁注,如果我跑..
<echo message="${backup.dir} --> ${directory::get-creation-time('${backup.dir}')}"/>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Expression: ${backup.dir} --> ${directory::get-creation-time('${backup.dir}')}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Could not find a part of the path "D:\D\RTC\${backup.dir}".
Run Code Online (Sandbox Code Playgroud)
如果我跑..
<echo message="Directory Name --> ${path::get-directory-name('${backup.dir}')}"/>
Run Code Online (Sandbox Code Playgroud)
我明白了
[echo] Directory Name -->
Run Code Online (Sandbox Code Playgroud)
总而言之,我现在很困惑..有什么想法吗?
我有一个ASP.MVC 3项目,我试图在我们的构建服务器上构建.我们使用nant来构建脚本来执行各种操作,但是我们使用MSBUILD任务来编译代码.我们的MVC3项目将无法在构建计算机上进行编译,并且缺少错误cMicrosoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets.
我已经安装了Windows .NET SDK并包含了工具和参考程序集,我在服务器上安装了MVC 3.
将"WebApplication.targets"复制到我的解决方案目录不是一种选择.无法在构建计算机上安装Visual Studio.
有什么想法吗?
我目前正在尝试更新版本号.在TeamCity中使用包含版本号的Nant构建文件.如果我只是用
<property name="versionNo" value="2.16.3."/>
.
.
<echo message="##teamcity[buildNumber '${versionNo}']"></echo>
Run Code Online (Sandbox Code Playgroud)
在脚本中buildNumber更新到2.16.3但我也希望在这个版本号上有计数器.意思是我想要的
<echo message="##teamcity[buildNumber '${versionNo}.{0}']"></echo>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有没有人知道如何做到这一点,在这个解决方案中尝试了很多东西http://binary-notes.blogspot.com/2011/05/controlling-application-version-number.html但是,$ {Version}参数是一个线索为了我 ?
通过在Teamcity中使用{0}作为buildnumber并将该内部版本号附加到文件中我自己的内部版本号来实现实现
<property name="versionNo" value="2.16.3."/>
.
.
<echo message="##teamcity[buildNumber '${versionNo}.${environment::get-variable('BUILD_NUMBER')}']"></echo>
Run Code Online (Sandbox Code Playgroud)