如果输出目录文件比源文件新,如何阻止 .csproj 文件的任何构建操作?

问题描述 投票:0回答:1

如果输出目录 DLL(例如 bin\Release 相对目录中)比所有源文件新,则尝试让 MSBuild 不执行任何操作。

如果输出目录比任何源都更新(例如“make”类型的增量构建),是否有一个属性可用于停止构建/复制操作?

创建了所有二进制文件,然后多次重新运行构建。 虽然不执行“编译”动作,但仍然会发生耗时的复制操作。

visual-studio msbuild
1个回答
0
投票

如果输出目录比任何源都更新(例如“make”类型的增量构建),是否有一个属性可用于停止构建/复制操作?

MSBuild 默认支持增量构建。您不需要设置属性来进行增量构建。

如果输出文件相对于输入文件是最新的(即输出文件比输入文件新),MSBuild 将跳过目标。它不会执行这样的复制操作。 enter image description here

但是,如果您发现仍然发生耗时的复制操作,请检查以下建议:

1.请检查您的.csproj文件中是否添加了

Copy
任务。如果是,请将
SkipUnchangedFiles
设置为
true
以跳过源和目标之间未更改的文件的复制。

例如

 <Target Name="CopyTarget" AfterTargets="Build">
    <ItemGroup>
        <FilesToCopy Include="path\to\your\files\**\*" />
    </ItemGroup>
    <Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="true" />
</Target>

2.正如@Jonathan所说,请检查您是否设置了

CopyToOutputDirectory="Always"
。如果设置了,这将在每次构建项目时将文件复制到输出目录,无论文件是否已更改。

参考文档:

复制任务

常见的 MSBuild 项目项

© www.soinside.com 2019 - 2024. All rights reserved.