【问题标题】:Building two C++ apps that use the same dll in vs 2010在 vs 2010 中构建两个使用相同 dll 的 C++ 应用程序
【发布时间】:2011-09-11 05:27:57
【问题描述】:

我有应用 A 和 B,都使用 dll D。
A、B 和 D 是 vs 2010 中的 C++ 项目。

A.sln 和 B.sln 是构建应用程序 A 和 B 的解决方案文件。
在 A 和 B 中都有对 dll D 的引用。

应用程序和 dll 的预期位置是(假设 Debug 构建):
A/调试/A.exe
A/Debug/D.dll
B/调试/B.exe
B/Debug/D.dll

奇怪的部分来了:当我重建(甚至清理)解决方案 B 时,它以某种方式
删除了 A/Debug/D.dll,即使这两个应用程序没有任何关系。

有没有办法指示vs在重建B时只删除B下的D.dll?

【问题讨论】:

  • 您的项目中是否有对 dll 的二进制引用?
  • 不确定“二进制引用”是什么意思,但在 A 和 B 中都有对 D 的引用(即,在 A.sln 中,右键单击项目 A,引用...添加新参考... D;B 相同)
  • 在 Visual Studio 中,您可以添加对项目的引用或直接添加到二进制文件。添加参考时打开的窗口中有选项卡。在引用的属性中还有一个“复制本地”选项。此选项将引用的文件复制到您的构建目录。当您说替换了 dll 时,您是否在构建时看到了本地复制?

标签: visual-studio-2010 dll build dependencies


【解决方案1】:

您是否通过复制*.vcproj 并重命名了一些东西来创建项目?如果是这样,那么您可能与用于识别项目的 GUID 发生冲突。 (这在许多开发商店中并不罕见。)

Microsoft 使用 GUID(缓存在该计算机上构建的每个项目的 Windows 注册表中)来“查找”引用的项目并在您的硬盘驱动器上找到它。 (因此,*.sln 文件在它们引用的项目在硬盘驱动器上移动时不会“中断”;同样,项目可以通过这种方式引用其他项目,而不是在移动内容时“中断”。)

回想一下,每个项目都有一个全局/通用唯一的 GUID 来标识项目(如果您有冲突,那就是那个),以及另一个标识“项目类型”的 GUID(例如,DLL、EXE , .NET 程序集等)还有额外的 GUID 来识别项目中的“文件集”,但我还没有弄清楚这些是如何使用的(还)。

Microsoft 在以下位置列出了一些项目类型 GUID:http://msdn.microsoft.com/en-us/library/hb23x61k%28v=vs.80%29.aspx

...您可以通过搜索网络获得更完整的三十岁左右的列表,例如:

http://onlinecoder.blogspot.com/2009/09/visual-studio-projects-project-type.html

“项目唯一”GUID 只是通过任何 GUID 生成器生成的,因此它们应该是真正唯一的。

【讨论】:

  • 都是新创建的项目和解决方案,使用不同的 GUID。
【解决方案2】:

解决方案 B 对 D 的引用的提示路径是什么?

如果您的提示路径指向解决方案 A,那就是您的问题。删除引用,将 D.dll 从它所在的任何位置复制到您的解决方案 B 文件夹中,然后使用该路径而不是解决方案 A 路径重建引用。

【讨论】:

  • “提示路径”是检查的好主意,所以 +50。我抓不到Karkashon,所以我不知道这是否解决了他的问题;但是,他的问题很好,因为 MSVS 通常是神秘的...... ;-)
【解决方案3】:

解决方案 A 怎么样? 当你重建它时会发生什么?它会删除 DLL 吗?

如果不是,请检查:

  1. D 项目是解决方案 A 的一部分(或不是)。
  2. D、A. 的项目依赖关系。
  3. “参考”和相应的链接器设置。

如果与解 A、B 不一致;您需要在解决方案 A 中应用相同的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多