Visual Studio中引用的Copy Local不起作用。

10

我在一个解决方案中有两个非托管的 C++ DLL,名为 A 和 B,并且 A 引用了 B。我想将 B.dll 复制到应用程序目录以供 A 使用。当我在 A 的“框架和引用”选项卡中点击引用上的“本地复制”时,它似乎被设置为 true,但单击应用会将该值恢复为 false。这是怎么回事?


非常不清楚,在那里你无法添加对于一个非托管的C++ DLL的引用。 - Hans Passant
@HansPassant B 是 A 的一个项目引用。 - Jason Fry
1
只有在我明白为什么xcopy不可靠之前,我才会使用/d和/y选项。 - Hans Passant
2
我在这里回答了类似的问题https://dev59.com/UXNA5IYBdhLWcg3wPLL-#13944692 - sergtk
4
我在使用管理的项目时,遇到了与您相同的问题(无法设置复制本地,它总是恢复到其原始值)...我使用的是MSVS 2012。 - dom_beau
显示剩余3条评论
3个回答

1

1
即使您解决了连接错误并成功设置了“复制本地”选项,Visual Studio仍然不会将依赖库或dll文件复制到A的目标文件夹中,无论您在项目A中对B的引用设置了什么标志。
Visual Studio 2015中未管理的引用处理仍然存在问题,我相信2017也同样糟糕。
如@HansPassant所指出的那样,您需要向项目A添加一个后期生成事件,将B.dll复制到与A.dll相同的文件夹中。
Visual Studio没有提供任何简单的方法来获取项目A中B.dll的路径,因此我们可以让项目B将该路径写入文本文件,然后让项目A从该文本文件中读取路径并将B.dll复制到与A.dll相同的文件夹中。
打开B项目属性,并将以下内容作为后期生成事件添加:
echo $(TargetPath)>$(SolutionDir)References.txt

在A项目属性中,将以下内容作为后期构建事件添加:
for /f %%f in ($(SolutionDir)References.txt) do xcopy /y %%f $(TargetDir)

如果您有第三个项目C.dll需要复制到A的输出文件夹中,也可以为C的项目属性添加类似的后期构建事件(请注意使用>>而不是>,这样它会将文本文件附加到末尾而不是覆盖它):
echo $(TargetPath)>>$(SolutionDir)References.txt

0

我之前遇到过这个问题。基本上,它会复制文件,然后将自己设置为 false 以防止再次复制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接