Visual Studio Copy Local on reference不起作用

时间:2012-11-27 17:43:45

标签: c++ visual-studio reference visual-studio-2012

我在一个解决方案中有两个非托管C ++ DLL,称为A和B,A有一个对B的引用。我想将B.dll复制到A的应用程序目录。当我点击引用时的“复制本地”在项目属性的A“框架和参考”选项卡中,它看起来像是设置为true,但是单击“应用”会将值恢复为false。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我知道它已经有一段时间但我刚遇到这个问题并发现了这个连接页面:

https://connect.microsoft.com/VisualStudio/feedback/details/766064/visual-studio-2012-copy-local-cannot-be-set-via-the-property-pages

似乎这是一个已知问题。您可以通过编辑项目文件来解决它。

答案 1 :(得分:1)

@HoopSomuah即使您解决了连接错误并使“复制本地”设置保持不变,Visual Studio仍然不会将依赖的lib或dll复制到A的目标文件夹中,无论您在引用上设置了什么标记项目A中的B.

Visual Studio 2015中的非托管引用处理仍然搞砸了,我确信2017年同样糟糕。

@JasonFry正如@HansPassant指出的那样,你需要在项目A中添加一个后期构建事件,以便将B.dll复制到与A.dll相同的文件夹中。

Visual Studio没有提供任何简单的方法来从项目A获取B.dll的路径,因此我们可以让项目B将该路径写入文本文件,然后让项目A读取该文本文件的路径并将B.dll复制到与A.dll相同的文件夹中。

打开B的项目属性并将其添加为构建后事件:

* */1 * * * touch restart.txt

在A的项目属性中,添加为构建后事件:

echo $(TargetPath)>$(SolutionDir)References.txt

如果你有一个需要复制到A输出文件夹的第三个项目C.dll,请在C的项目属性中添加一个类似的构建后事件(注意>> 而不是> ,因此它会附加到文本文件而不是覆盖它:)

for /f %%f in ($(SolutionDir)References.txt) do xcopy /y %%f $(TargetDir)

答案 2 :(得分:0)

我有一段时间没有这个问题。基本上,它是真的,所以它复制文件,然后将自己设置为false以防止自己重新复制它。