9

在构建托管代码时,Visual Studio 正确(并且递归地)将引用的托管项目的 dll 复制到正在构建的项目的输出文件夹中。

但是,如果这些引用之一是依赖于非托管 dll 的托管 DLL,则这些非托管 DLL 不会复制到输出文件夹,即使它们在同一解决方案中的相应项目被列为托管 DLL 的依赖项。

我意识到可以通过让所有项目使用相同的输出文件夹来解决这个问题。对于大多数项目,我们已经这样做了,但我们更喜欢将单元测试输出文件夹分开,这会导致使用托管 Dll 和非托管依赖项的单元测试出现上述问题。

我们现在使用的解决方案是一个预构建事件来复制必要的 DLL,但这会浪费时间并且容易出错,因为每个使用托管 DLL 的项目都需要重复它。

因此,我想知道是否有办法让构建系统了解它应该在决定复制托管 DLL 时始终复制托管 DLL 的非托管依赖项?

4

1 回答 1

5

一种解决方法似乎是将另一个节点添加到托管 DLL 项目,命名非托管 DLL 并设置 Build Action =“None”,并且 Copy to Output Directory =“Copy if Newer”。

编辑:对于构建 C++/CLR 项目,我认为这会起作用:

添加节点,并将其构建工具设置为Custom Build Tool。然后,在自定义构建步骤页面中,将命令设置为复制 $(InputPath) $(OutDir)并将输出设置为$(OutDir)\$(InputFileName)。看起来应该可以。

于 2009-12-30T13:22:32.210 回答