5

私はMSBuildの初心者です。これまでのところ、渡されたコンテンツ プロパティに基づいて C:\ にテキスト ファイルを作成する「MakeTextFile」というカスタム タスクを作成できました。これは、コマンド ライン プロンプトから実行して動作します。

これも .targets ファイル (プロジェクト タグの下) に含めました。

<ItemGroup>
    <AvailableItemName Include="CreateTextFileAction" />
</ItemGroup>

クライアント アプリケーション .csproj で Import タグを使用すると、アイテム ビルド アクションを「CreateTextFileAction」に設定できるようになりましたが、アクションはトリガーされません (C:\ にテキスト ファイルが作成されないため)。

ビルド アクション 'CreateTextFileAction' でマークされたアイテムのすべてのファイル パスを取得し、それらをカスタム タスクに渡すにはどうすればよいですか?

参考までに、私の .targets ファイル:

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <AvailableItemName Include="CreateTextFileAction" />
    </ItemGroup>

    <UsingTask AssemblyFile="CustomMSBuildTask.dll" TaskName="CustomMSBuildTask.MakeTextFile" />


   <Target Name="MyTarget">
       <MakeTextFile Contents="TODO HOW DO I GRAB MARKED FILES?" />
   </Target>
</Project>
4

1 に答える 1

4

csproj ファイルには、一連のターゲットが定義されています。3 つの主要なエントリ ポイントは、Build、Rebuild、Clean です。これらのターゲットには、それぞれ一連の依存関係があります。標準の csproj ビルドの一部として独自のターゲットを作成する場合は、これらの依存関係内で適切な注入ポイントを見つける必要があります。

使いやすくするために、BeforeBuild と AfterBuild という 2 つの標準ターゲットをオーバーライドできます。これをcsprojファイルで定義し(csharpターゲットファイルのインポート後)、そこでカスタムタスクを呼び出すと、動作するはずです(または少なくともさらに先に進みます)。

   <Target Name="BeforeBuild">
       <MakeTextFile Contents="TODO HOW DO I GRAB MARKED FILES?" />
   </Target>
于 2012-06-27T20:38:05.773 に答える