NAnt: Проверьте, был ли включаемый файл уже включен - PullRequest
0 голосов
/ 14 октября 2010

Кто-нибудь знает способ проверить, был ли файл уже включен?

<include buildfile="${script.dir}\util.include.nant" />
.
.
.
.
<include buildfile="${script.dir}\util.include.nant" />

Это приведет к исключению, что цель была дублированаЕсть ли способ обойти?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Только что увидел этот вопрос , который кажется связанным и решил изменить регистр одного из дубликатов, включенных в a.build, в мой другой ответ:

<include buildfile="c.build" />
<include buildfile="C.build" />

Boom - дубликатошибка цели.Похоже, nant достаточно яркий, чтобы игнорировать дубликаты включений, но чувствителен к регистру при их сравнении.

0 голосов
/ 20 октября 2010

Этот минимальный пример хорошо работает для меня в nant 0.86.3075.0:

В этом примере a.build и b.build несколько раз включают c.build. a.build и b.build также включают друг друга, но не зависят от целей друг друга, поскольку это создает циклическую зависимость.

Обратите внимание на использование echo на уровне проекта - похоже, они появляются при включении файлов, что может помочь вам отладить вашу проблему.

a.build:

<?xml version="1.0" encoding="utf-8"?>
<project default="a.go" name="a">

    <echo message="In A"/>

    <include buildfile="b.build" />
    <include buildfile="b.build" />
    <include buildfile="c.build" />
    <include buildfile="c.build" />

    <target name="a.go" depends="c.go">
        <echo message="Building A"/>
    </target>

    <include buildfile="b.build" />
    <include buildfile="c.build" />

</project>

b.build:

<?xml version="1.0" encoding="utf-8"?>
<project default="b.go" name="b">

    <echo message="In B"/>

    <include buildfile="a.build" />
    <include buildfile="a.build" />
    <include buildfile="c.build" />
    <include buildfile="c.build" />

    <target name="b.go" depends="c.go">
        <echo message="Building B"/>
    </target>

    <include buildfile="a.build" />
    <include buildfile="c.build" />

</project>

c.build:

<?xml version="1.0" encoding="utf-8"?>
<project default="c.go" name="c">

    <echo message="In C"/>

    <target name="c.go">
        <echo message="Building C"/>
    </target>

</project>

выход:

NAnt 0.86 (Build 0.86.3075.0; nightly; 02/06/2008)
Copyright (C) 2001-2008 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///C:/Documents and Settings/rbaker/My Documents/nantinclude/a.build
Target framework: Microsoft .NET Framework 3.5
Target(s) specified: a.go 

     [echo] In A
     [echo] In B
     [echo] In C

c.go:

     [echo] Building C

a.go:

     [echo] Building A

BUILD SUCCEEDED

Total time: 0.1 seconds.

NAnt 0.86 (Build 0.86.3075.0; nightly; 02/06/2008)
Copyright (C) 2001-2008 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///C:/Documents and Settings/rbaker/My Documents/nantinclude/b.build
Target framework: Microsoft .NET Framework 3.5
Target(s) specified: b.go 

     [echo] In B
     [echo] In A
     [echo] In C

c.go:

     [echo] Building C

b.go:

     [echo] Building B

BUILD SUCCEEDED

Total time: 0.1 seconds.

NAnt 0.86 (Build 0.86.3075.0; nightly; 02/06/2008)
Copyright (C) 2001-2008 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///C:/Documents and Settings/rbaker/My Documents/nantinclude/c.build
Target framework: Microsoft .NET Framework 3.5
Target(s) specified: c.go 

     [echo] In C

c.go:

     [echo] Building C

BUILD SUCCEEDED

Total time: 0 seconds.
...