我想基于一个变量加载不同的属性文件。

基本上,如果执行dev构建使用此属性文件,如果执行测试构建使用此其他属性文件,并且如果执行生成构建,则使用第三个属性文件。

===============>>#1 票数:26 已采纳

步骤1 :在NAnt脚本中定义属性以跟踪您正在构建的环境(本地,测试,生产等)。

<property name="environment" value="local" />

步骤2 :如果您还没有所有目标所依赖的配置或初始化目标,则创建配置目标,并确保其他目标依赖于它。

<target name="config">
    <!-- configuration logic goes here -->
</target>

<target name="buildmyproject" depends="config">
    <!-- this target builds your project, but runs the config target first -->
</target>

步骤3 :更新配置目标以根据环境属性提取适当的属性文件。

<target name="config">
    <property name="configFile" value="${environment}.config.xml" />
    <if test="${file::exists(configFile)}">
        <echo message="Loading ${configFile}..." />
        <include buildfile="${configFile}" />
    </if>
    <if test="${not file::exists(configFile) and environment != 'local'}">
        <fail message="Configuration file '${configFile}' could not be found." />
    </if>
</target>

注意,我喜欢允许团队成员定义他们自己的local.config.xml文件,这些文件没有提交给源代码控制。 这为存储本地连接字符串或其他本地环境设置提供了一个好地方。

第4步 :调用NAnt时设置环境属性,例如:

  • nant -D:environment = dev
  • nant -D:environment = test
  • nant -D:环境=生产

===============>>#2 票数:5

我有一个类似的问题,scott.caligan的答案部分解决了,但我希望人们能够设置环境并加载适当的属性文件,只需指定一个目标,如下所示:

  • 不开发
  • 没有考试
  • nant stage

您可以通过添加设置环境变量的目标来完成此操作。 例如:

<target name="dev">
  <property name="environment" value="dev"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="test">
  <property name="environment" value="test"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="stage">
  <property name="environment" value="stage"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="importProperties">
  <property name="propertiesFile" value="properties.${environment}.build"/>
  <if test="${file::exists(propertiesFile)}">
    <include buildfile="${propertiesFile}"/>
  </if>
  <if test="${not file::exists(propertiesFile)}">
    <fail message="Properties file ${propertiesFile} could not be found."/>
  </if>
</target>

===============>>#3 票数:5

您可以使用include任务在主构建文件中包含另一个构建文件(包含您的属性)。 include任务的if属性可以测试变量以确定是否应该包含构建文件:

<include buildfile="devPropertyFile.build" if="${buildEnvironment == 'DEV'}"/>
<include buildfile="testPropertyFile.build" if="${buildEnvironment == 'TEST'}"/>
<include buildfile="prodPropertyFile.build" if="${buildEnvironment == 'PROD'}"/>

===============>>#4 票数:0

我做这种事情的方式是根据使用nant任务的构建类型包含单独的构建文件。 可能的替代方案可能是在nantcontrib中使用iniread任务

  ask by WildJoe translate from so

未解决问题?本站智能推荐:

1回复

如何使用nant脚本复制包含所有内容的一个目录?

我需要复制一个包含所有内容的文件夹。 我的文件夹结构是这样的 Main Folder folder1 Folder2 如何使用nant脚本复制包含所有这些内容的主文件夹。 请帮我。 谢谢
4回复

是否有一个NAnt任务将显示所有属性名称/值?

是否有一个NAnt任务将回显出构建期间当前设置的所有属性名称和值? 可能与Ant echoproperties任务相当的东西?
3回复

在NAnt中构建Azure部署程序包

我正在考虑将系统迁移到Windows Azure。 当前,我们有一个自动化流程,可以使用Team City和NAnt将所有内容构建并打包为msi。 有什么方法可以构建部署所需的软件包-我不需要部署它,只需创建软件包即可。 谢谢 斯图
3回复

如何使用Nant构建类库

如何使用Nant(0.86)将.net 3.5类库编译为dll? 这是我到目前为止: 如何在GAC中引用系统dll? 完成这条线似乎有效。 这是我的脚本: 我通过使用JP Boodhoos帖子得到了这一点
14回复

NAnt或MSBuild,哪一个可以选择?

我知道Stack Overflow上还有其他与NAnt和MSBuild相关的问题,但是我找不到两者之间的直接比较,所以这就是问题所在。 什么时候应该选择NAnt而不是MSBuild? 哪个更适合什么? NAnt更适合家庭/开源项目和MSBuild工作项目吗? 这两个中的任何一个有什么
3回复

使用NAnt构建安装项目

我已经有一个NAnt构建脚本,可以一起构建/运行测试/压缩Web项目,等等。但是我正在开发一个基本的桌面应用程序。 我将如何使用NAnt构建安装项目,以便将其包含在TeamCity的构建报告中。 编辑:安装程序是Visual Studio附带的基本安装程序项目。 它是公司内部使用的,因
1回复

扫描NAnt.Contrib.Tasks.dll失败

我的.build : 在lib.dir中,我有NAnt.Contrib.Tasks.dll 如果我尝试使用nant则会出现此错误消息: 有什么想法如何解决吗?
8回复

使用Nant构建.NET 4项目

我如何才能构建面向.NET 4.0 Framework的项目?
1回复

是否可以通过编程方式与Nant构建体进行交互?

我的反射器试用版才用完:(因此我目前无法真正检查程序集,因此我想知道是否有任何方法可以通过.net编程地与nant文件进行交互。 我基本上希望能够进行以下编程: 查看所有构建任务 运行构建任务 读取任务的输出(理想情况下是在某些模型中,但是我猜可以使用字符串)
2回复

Nant:指示MySql创建数据库并运行脚本

如何指示Nant告诉MySql从特定位置运行ddl脚本,然后按照指示运行其他脚本? Google让我进入了许多无法正常运行的网站 ...