【问题标题】:Run target once for built project为构建的项目运行一次目标
【发布时间】:2020-08-10 11:34:32
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: msbuild visual-studio-2019


    【解决方案1】:

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

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

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

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

    建议

    1) 如果您使用Directory.Build.propsDirectory.Build.targets,请在解决方案文件夹或任何父目录中删除,仅在有A.csproj文件的Project 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" />
    

    【讨论】:

    • 感谢导入是我所缺少的
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 2012-12-08
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多