我已经用NAnt成功构建了这个项目。
现在,如果我使用以下命令编译项目:
nant -D:build.defines=FAKE_AD_AUTH build
我想运行应用程序,因为我知道我用FAKE_AD_AUTH
编译了项目。
那我怎么知道这个项目是用nant -D:build.defines=FAKE_AD_AUTH build
还是nant build
构建的?
答案 0 :(得分:3)
NAnt本身就是一个构建工具。它不会向它构建的应用程序添加任何属性,除非您指示它。而这个“指令”完全是定制的,并且在某种程度上对每个应用程序都是唯一的。
在命令行中定义属性时,它最终会在构建脚本中成为普通的NAnt属性(准确地说是只读属性)。然后由您决定如何使用它来“标记”您的应用程序。
如果您的应用具有安装包(MSI),则可以使用某些构建信息向包中添加MSI属性。或者,您可能希望添加一些数据库记录,或配置文件中的设置等。
更新于2014年1月13日
好的,这是一个例子。假设您的应用程序具有配置文件(基于XML),并且它包含一个名为FakeBuild
的设置,它会影响应用程序的行为,例如:它不是向真正的收件人发送真实的电子邮件,而是将一条线转储到模拟发送时刻的日志文件中。
配置文件可能如下所示:
<configuration>
<settings>
...
<setting name="FakeBuild" value="false">
...
</settings>
</configuration>
这个文件是源代码的一部分,我的意思是,它与VCS系统中的源代码一起存在。构建脚本包含编译代码的指令,因此它知道配置文件的路径。
现在,构建脚本从命令行检查自己的输入,并将上述设置分别设置为true
或false
。例如:
<xmlpoke file="${path.to.config}" value="true" xpath="configuration/settings/setting[@name='FakeBuild']/@value" if="${property::exists('build.defines')}"/>
只有当您传入NAnt属性build.defines
时,上面的行才会进行评估。显然,您可以修改传递的方式,从而检查属性。
希望这能为拟议的解决方案带来更多启示。