我有一个DLL POST_BUILD步骤,它将DLL复制到目录A.假设我然后从目录A中删除该文件。然后在Visual Studio中点击F5并且不复制该文件。
我有什么选择?如何指定每次链接DLL时以及目录A中的文件与(或缺失)过期时都必须执行一组操作?
编辑:这是一个非托管的C ++项目,只有CMake生成的.vcproj文件。因此,在我的工作流程中编辑.vcproj是不实际的。
答案 0 :(得分:1)
post build命令仅在msbuild确定需要重建项目时执行。它不会知道你的项目依赖于该文件,因为它不解析post build命令,这是不切实际的。
到目前为止,最简单的解决方案是不删除该文件,没有什么意义。另一种方法是使msbuild更智能,就是将文件添加到项目中。使用项目+添加现有项目。设置构建操作=内容,复制到输出目录=复制如果更新。它确实堵塞了你的项目树。
答案 1 :(得分:1)
汉斯的做法也很好。
而不是使用IDE挂钩,最好直接编辑项目,因为msbuild提供了一整套完成任务的任务。
如果您编辑.csproj文件(右键单击 - >卸载项目 - >编辑)并添加构建后步骤,您将获得所需的脏复制行为:
<Target Name="AfterBuild">
<ItemGroup>
<BuildArtifacts Include="MyDll.dll"/>
<FileWrites Include="$(DestDir)\*.*" />
</ItemGroup>
<Copy SourceFiles="@(BuildArtifacts)" DestinationFiles="->'$(DestDir)\%(Filename)%(Extension)'" />
</Target>