首页 > 解决方案 > 为构建的项目运行一次目标

问题描述

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

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

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

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

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

标签: msbuildvisual-studio-2019

解决方案


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

我认为您使用Directory.Build.props 或 Directory.Build.targets作为 msbuild 脚本并将其写入该RemoveRelease64文件。

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

所以作为一个建议,如果您希望msbuild 脚本仅适用于项目A而不是任何引用的项目,,,B您应该只将 msbuild 脚本放在文件存在的 A 的项目文件夹中。CDA.csproj

建议

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

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

在文件中使用msbuild 导入节点A.csproj,然后它将仅对项目 A执行,而不是B, C, D:

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

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

推荐阅读