5

我是 MSBuild 的初学者。到目前为止,我已经能够创建一个名为“MakeTextFile”的自定义任务,它根据您传递的内容属性在 C:\ 中创建一个文本文件。这可以从命令行提示符运行。

我还将它包含在我的 .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 文件具有一组已定义的目标。三个主要入口点是 Build、Rebuild 和 Clean。这些目标每个都有一组依赖项。如果您编写自己的目标作为标准 csproj 构建的一部分,则需要在这些依赖项中找到合适的注入点。

为了便于使用,有两个标准目标供您覆盖,称为 BeforeBuild 和 AfterBuild。如果您在 csproj 文件中定义它(在导入 csharp 目标文件之后)并在其中调用您的自定义任务,那么它应该可以工作(或至少继续前进)。

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