将DDL添加到Visual Studio C ++项目的正确方法是什么,以便将DLL复制到(OutDir)?我的目标是确保OutDir中的DLL始终与源DLL相同,例如即使出于某种原因,DLL在OutDir中在构建期间获得了更新的时间戳,它也会被更新以确保它与项目中包含的内容相同?
修改: 有一些明显的解决方案,比如使用prebuild / postbuild事件来手动将dll复制到你想要的位置。这对于基本的家庭项目来说是好的,但由于一些原因,这在实际项目中是不可接受的。例如,没有DLL本身的依赖性跟踪。如果有人提交了dll,那么就不会有任何需要的构建,并且会跳过prebuild / postbuild事件。这完全打破了CI和自动测试,因为更新dll不会被复制,直到提交触发重新编译的内容为止。 到目前为止,我还没有找到任何正常工作的东西,这简直令人惊讶。唯一远远类似于正常运行的实现的是MSBuild's Copy Task但是它没有与VS IDE集成,如果你使用它,你会神奇地复制这些dll,甚至不知道它们被引用的原因和位置。我们还尝试为.dll实现PublishDLLDependency规则,但这并不能很好地工作,因为这将遵循make-style依赖性检查,如果你没有在OutDir中拥有更新的dll,则不会复制dll。 CopyTask在这种情况下使用了正确的方法:就像robocopy一样,它在复制时比较大小和时间戳。 简而言之,IDE中应该有适当的机制内置,允许您添加一些DLL,并在构建依赖于它们的项目时将它们复制到OutDir。正确实施后,如果我做F7(Build),我应该看到这样的东西:
Copying some.dll
Copying other.dll
...
Compiling a.cpp
...
当F7被击中时,它应该测试是否需要复制这些dll,就像检查所有步骤一样,如果需要编译/链接的话。这个dll复制步骤不应该绑定到任何构建事件,它必须与重建,重新链接或任何其他事件无关,因为dll(在我的情况下)不是构建但是项目来自在其他地方。