运行 构建项目一次目标

Run target once for built project

我有一个 msbuild 脚本可以编译文件,然后将它们复制到不同的目录。为了确保目标文件夹中只有新构建的文件,我想先删除目标文件夹。

我试过运行它在构建目标之前是这样的

<Target Name="RemoveRelease64" BeforeTargets="Build" Condition="'$(Platform)' == 'x64' and '$(Configuration)' == 'Release'">
    <RemoveDir Directories="$(SolutionDir)bin64" />
</Target>

但是我的主项目依赖的每个项目都会调用这个。当开始为项目 A 构建时,它首先构建项目 B、C 和 D。对于每个构建的项目,都会调用目标并删除文件夹。因此,它过于频繁地删除文件夹。

有没有办法为开始构建的项目只调用一次目标?

Is there a way to call a target only once for the project that the build got started for?

我认为您使用 Directory.Build.props or Directory.Build.targets 作为 msbuild 脚本并在该文件中写入 RemoveRelease64

如果您将文件放在解决方案文件夹中,作为其范围,它将适用于当前文件夹和任何子文件夹中的项目。

作为建议,如果您希望 msbuild 脚本 仅适用于项目 A 而不是任何引用projects B,C,D,你应该只把msbuild脚本放在A的项目文件夹中,那里有A.csproj文件。

建议

1)如果使用Directory.Build.propsDirectory.Build.targets,在解决方案文件夹或任何父目录中删除它,只在文件夹中添加它存在 A.csproj 文件的项目 A。

2) 除了,您可以放弃使用Directory.Build.props/targets 文件。 相反,您可以将其重命名为RemoveRelease64.targets,请记住不要使用这两个名称。

A.csproj 文件中使用 msbuild import node 然后它将只执行 项目 A 而不是 B,C ,D:

将此添加到 A.csproj 文件中,并删除解决方案文件夹和项目文件夹中的任何 Directory.Build.propsDirectory.Build.targets

<Import Project="xxx\RemoveRelease64.targets" />