MSBuild 导入自定义目标



我有一个通用的目标文件,其中包含 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.WebAppConfig%(RecursiveDir)%(Filename)%(Extension)')" />
    <Copy SourceFiles="@(OutputSatellites)" DestinationFiles="@(OutputSatellites->'$(SolutionDir)Test.WebAppConfig%(RecursiveDir)%(Filename)%(Extension)')" />
  </Target>
</Project>

上述目标文件将导入到解决方案中的每个 csproj 中。

目标"AfterBuild"和"BeforeBuild"被Microsoft.Common.targets项目覆盖。如果未明确包含项目,则会自动将其添加为标题和预告片。

这样,迁移到新 csproj 格式的项目(以及具有新 csproj 格式的新项目(就不能以这种方式指定"BeforeBuild"和"AfterBuild"目标。

相反,建议使用 BeforeTargetsAfterTargets 属性注册自定义"预生成"和"后期生成"目标,如下所示:

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

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

另请参阅相关的 github 问题

相关内容

  • 没有找到相关文章

最新更新