如何在Visual Studio中使用自定义构建操作的.targets文件?

时间:2012-06-25 18:10:44

标签: msbuild msbuild-task

我是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>

1 个答案:

答案 0 :(得分:1)

csproj文件具有一组已定义的目标。三个主要入口点是Build,Rebuild和Clean。这些目标每个都有一组依赖项。如果您编写自己的目标作为标准csproj构建的一部分,则需要在这些依赖项中找到合适的注入点。

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

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