【问题标题】:MSBuild Import Custom TargetMSBuild 导入自定义目标
【发布时间】:2017-05-11 01:55:47
【问题描述】:

我有一个具有 AfterBuild 的通用目标文件。目标文件处于解决方案级别。所有 csproj 使用 <Import Project=$(SolutionDir)\custom.targets 文件导入自定义目标文件。但是 custom.targets 中的 afterbuild 永远不会为任何 csproj 运行。我在这里错过了什么?

自定义目标文件具有以下内容

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <OutputTargets Include="$(TargetDir)$(TargetName).???" />
    <OutputSatellites Include="$(TargetDir)\**\$(TargetName).resources.dll" />
  </ItemGroup>
  <Target Name="AfterBuild">
    <Copy SourceFiles="@(OutputTargets)" DestinationFiles="@(OutputTargets->'$(SolutionDir)Test.WebApp\Config\%(RecursiveDir)%(Filename)%(Extension)')" />
    <Copy SourceFiles="@(OutputSatellites)" DestinationFiles="@(OutputSatellites->'$(SolutionDir)Test.WebApp\Config\%(RecursiveDir)%(Filename)%(Extension)')" />
  </Target>
</Project>

Above Target 文件被导入到解决方案中的每个 csproj。

【问题讨论】:

  • 您应该如何完成“AfterBuild”目标?是通过 DependsOnTargets、AfterTargets 还是名为“AfterBuild”的目标?项目中相对于 Microsoft.CSharp.targets 的导入在哪里?
  • 它是一个目标名称AfterBuild,它在CShsrp.targets之后按导入顺序
  • 听起来应该可以。一个可能的解决方法是我的建议 here 使用 AfterTargets="Build"。
  • 我的 .targets 文件中具有 AfterBuild 目标的 Aftertarget 属性?注意目标文件作为 csproj 的一部分导入,我使用 msbuild 编译解决方案文件。
  • 是 AfterTargets 是自定义 Target 元素上的一个属性。然后,您可以为目标命名任何您想要的名称。

标签: c# msbuild csproj


【解决方案1】:

目标“AfterBuild”和“BeforeBuild”被 Microsoft.Common.targets 项目覆盖。如果项目没有明确包含,它会自动添加为标题和预告片。

这样,迁移到新 csproj 格式的项目(以及具有新 csproj 格式的新项目)无法以这种方式指定“BeforeBuild”和“AfterBuild”目标。

建议您使用BeforeTargets 或AfterTargets 属性来注册您的自定义“PreBuild”和“PostBuild”目标,如下所示:

<Target Name="DefinitelyNotBeforeBuild" BeforeTargets="PreBuildEvent">
  <!-- BeforeBuild goes here -->
</Target>
<Target Name="DefinitelyNotAfterBuild" AfterTargets="PostBuildEvent">
  <!-- AfterBuild goes here -->
</Target>

确保不将这些目标命名为“BeforeBuild”和“AfterBuild”。如果这样做,它们将被覆盖,这将不起作用。

另见相关github issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多