2

私は、次のような他の多くのNAntスクリプトに含める一般的なNAntスクリプト(いくつかの一般的なターゲットと定数を含む)を持っています。

<include buildfile="<path>\common.build" verbose="true" />

呼び出しスクリプトはさまざまなフォルダーにあります。

このインクルードされたスクリプトでは、インクルードされたスクリプトが存在する同じディレクトリからファイルを読み取る必要があります。「現在のディレクトリ」は、呼び出し元のスクリプトのディレクトリに設定されますが、含まれていません。含まれているスクリプトのディレクトリパスを取得するにはどうすればよいですか?

次の構成を使用する場合(含まれているスクリプト内):

${ path::get-directory-name(project::get-buildfile-path()) }

次に、含まれているスクリプトではなく、呼び出し元のスクリプトのフォルダーパスを取得します。

含まれているスクリプトのパスを取得する方法はありますか?

よろしく、イワン。

4

2 に答える 2

4

私の提案:次のように、呼び出し元のスクリプト内のプロパティで、呼び出されたスクリプトファイルへのパスを定義します。

<property name="include.buildfile.path" value="C:\foo\common.build" />
<include buildfile="${include.buildfile.path}" verbose="true" />

次のように、目的のディレクトリパスにアクセスする一般的なスクリプトです。

${path::get-directory-name(include.buildfile.path)}
于 2012-09-15T08:53:43.800 に答える
3

NAntのソースコードを調べましたが、残念ながら、既存の関数やカスタム関数では実行できません。NAntは、含まれているファイルをプロジェクト構造に追加し、特定のノードの元のファイル名を取得Projectする必要があります。 LocationMap、としてマークされているinternalため、スクリプトで抽出することもできません。マスタースクリプトに対してファイルの場所が一定であると想定する(そしてそこから下に移動する)などの回避策を実行するか、必要な機能を公開する関数を使用してNAntのカスタムバージョンを作成することができます。最初の解決策はきれいではなく、2番目の解決策は簡単ではありません。

于 2012-09-14T13:29:08.657 に答える