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

Jam*_*mes 5 msbuild msbuild-task

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

我也将它包含在我的 .targets 文件中(在项目标签下):

<ItemGroup>
    <AvailableItemName Include="CreateTextFileAction" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

当我在客户端应用程序 .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>
Run Code Online (Sandbox Code Playgroud)

dau*_*hey 6

csproj 文件具有一组已定义的目标。三个主要入口点是构建、重建和清理。这些目标各自具有一组依赖关系。如果您将自己的目标编写为标准 csproj 构建的一部分,则需要在这些依赖项中找到合适的注入点。

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

   <Target Name="BeforeBuild">
       <MakeTextFile Contents="TODO HOW DO I GRAB MARKED FILES?" />
   </Target>
Run Code Online (Sandbox Code Playgroud)