如何设置属性以及如何在nant中获取属性

ujj*_*val 6 xml nant

我已经用NAnt成功构建了这个项目.

现在,如果我使用以下命令编译项目:

nant -D:build.defines=FAKE_AD_AUTH build
Run Code Online (Sandbox Code Playgroud)

我想运行应用程序,因为我知道我编译了项目FAKE_AD_AUTH.

那么我怎么知道这个项目是建造nant -D:build.defines=FAKE_AD_AUTH build还是仅建造nant build

Yan*_*nko 4

NAnt 本身就是一个构建工具。它不会向它构建的应用程序添加任何属性,除非您指示它这样做。这个“指令”完全是定制的,并且在某种程度上对于每个应用程序都是唯一的。

当您在命令行中定义属性时,它最终会成为构建脚本中的普通 NAnt 属性(准确地说,是只读属性)。然后由您决定如何使用它来“标记”您的应用程序。

如果您的应用程序有安装包 (MSI),则将 MSI 属性添加到带有一些构建信息的包中可能是有意义的。或者,您可能想添加一些数据库记录或配置文件中的设置等。

更新于 2014 年 1 月 13 日

好的,这是一个例子。假设您的应用程序有配置文件(基于 XML),并且它包含一个名为 的设置FakeBuild,该设置会影响应用程序的行为,例如,它不是将真实的电子邮件发送给真实的收件人,而是将一行转储到模拟发送时刻的日志文件中。

配置文件可能如下所示:

<configuration>
  <settings>
    ...
    <setting name="FakeBuild" value="false">
    ...
  </settings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

该文件是源代码的一部分,我的意思是,它与 VCS 系统中的源代码一起存在。构建脚本包含编译代码的指令,因此它也知道配置文件的路径。

现在,构建脚本从命令行检查其自己的输入,并将上述设置分别设置为truefalse。例如:

<xmlpoke file="${path.to.config}" value="true" xpath="configuration/settings/setting[@name='FakeBuild']/@value" if="${property::exists('build.defines')}"/>
Run Code Online (Sandbox Code Playgroud)

仅当您传入 NAnt 属性build.defines时,上面的行才会进行计算。显然,您可以修改传递的方式,从而检查属性。

希望这能为提议的解决方案带来更多启发。