我在一个解决方案中有两个非托管 C++ DLL,分别称为 A 和 B,并且 A 引用了 B。我想将 B.dll 复制到 A 的应用程序目录中。当我在 A 的引用上单击“复制本地”时“在其项目属性中的“框架和引用”选项卡中,它看起来设置为 true,但单击应用会将值恢复为 false。知道这里有什么吗?
3 回答
我知道已经有一段时间了,但我刚刚遇到了这个问题并找到了这个连接页面:
似乎这是一个已知问题。您可以通过编辑项目文件来解决它。
@HoopSomuah 即使您解决了连接错误并粘贴了“复制本地”设置,Visual Studio 仍然不会将依赖库或 dll 复制到 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 的项目属性并将其添加为构建后事件:
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
我前段时间遇到过这个问题。基本上,它是真的,所以它复制文件,然后将自己设置为 false 以防止自己重新复制它。