我有一个具有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>
将上面的Target文件导入到解决方案中的每个csproj中。
答案 0 :(得分:1)
Microsoft.Common.targets项目将目标“ AfterBuild”和“ BeforeBuild”覆盖。如果未明确包含该项目,则会自动将其添加为标题和尾部。
以这种方式迁移到新的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