运行 构建项目一次目标
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.props
或Directory.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.props
或 Directory.Build.targets
。
<Import Project="xxx\RemoveRelease64.targets" />
我有一个 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.props
或Directory.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.props
或 Directory.Build.targets
。
<Import Project="xxx\RemoveRelease64.targets" />