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