msbuild - 为构建的项目运行一次目标
问题描述
我有一个编译文件然后将它们复制到不同目录的 msbuild 脚本。为了确保只有新构建的文件在目标中,我想在此之前删除目标文件夹。
我尝试在这样的构建目标之前运行它
<Target Name="RemoveRelease64" BeforeTargets="Build" Condition="'$(Platform)' == 'x64' and '$(Configuration)' == 'Release'">
<RemoveDir Directories="$(SolutionDir)bin64" />
</Target>
但是对于我的主要项目所依赖的每个项目都需要这样做。当开始为项目 A 构建时,它首先构建项目 B、C 和 D。对于每个构建的项目,都会调用目标并删除文件夹。因此,它经常删除文件夹。
有没有办法为开始构建的项目只调用一次目标?
解决方案
有没有办法为开始构建的项目只调用一次目标?
我认为您使用Directory.Build.props 或 Directory.Build.targets作为 msbuild 脚本并将其写入该RemoveRelease64
文件。
如果您将文件放在解决方案文件夹中,作为其范围,它将适用于当前文件夹和任何子文件夹中的项目。
所以作为一个建议,如果您希望msbuild 脚本仅适用于项目A
而不是任何引用的项目,,,B
您应该只将 msbuild 脚本放在文件存在的 A 的项目文件夹中。C
D
A.csproj
建议
1)如果你使用Directory.Build.props
or Directory.Build.targets
,在解决方案文件夹或任何父目录中删除它,只在A.csproj
文件存在的项目 A 的文件夹中添加它。
2)此外,您可以放弃使用Directory.Build.props/targets
文件。相反,您可以将其重命名为RemoveRelease64.targets
,请记住不要使用这两个名称。
在文件中使用msbuild 导入节点A.csproj
,然后它将仅对项目 A执行,而不是B
, C
, D
:
将此添加到A.csproj
文件中并删除解决方案文件夹和项目文件夹中的任何Directory.Build.props
或Directory.Build.targets
。
<Import Project="xxx\RemoveRelease64.targets" />
推荐阅读
- string - Powershell 用通配符替换
- javascript - 功能如何表现异常?
- apache-spark - 快速压缩
- postgresql - 如何在 postgres 中使用 DO
- json - 可以 Loggly 解析(派生值)JSON 数组(使用 HTTP/S 批量端点接收)
- javascript - 使用向下箭头选择下一个列表项
- angular - 如何按添加顺序从 Firebase 集合中检索项目(AngularFire 5)?
- java - Java中带有矩阵的多元线性回归
- java - 列出不同的元素,包括 Java Streams 的计数
- python - 如何使用 Python 将数据库 (SPSS) 中的变量标记为缺失值?