【问题标题】:VS copies a dependent dll without build eventsVS 在没有构建事件的情况下复制依赖的 dll
【发布时间】:2013-01-05 13:45:22
【问题描述】:

我想弄清楚 Visual Studio 中的一些奇怪的预构建行为。

单个 Visual Studio 2008 解决方案包含:

  • 一个原生 c++ 库项目,
  • 托管的 c++/cli 库项目(本机项目的包装器)
  • 一个 c# 控制台项目(使用 cli 包装器)

托管的 c++/cli 项目对原生 c++ 项目有依赖,
并且 c# 项目依赖于 c++/cli 项目。 依赖项都针对项目,而不是单个 dll。

在调试模式下一切正常。如果我执行主 c# 项目,则检查所有依赖项目的更改,重新编译,并将本机 dll 复制到相应的输出目录。

在发布模式下,不会自动复制本机dll。

我知道我可以手动定义一个构建后事件来复制 dll,但为什么它会在调试模式下自动复制?在任何项目中都没有定义构建前或构建后事件。

什么黑魔法让它在调试模式下自动工作,但在发布模式下却不能?


(附录)

这是调试模式的构建日志的摘录:

2>------ Neues Erstellen gestartet: Projekt: CppManaged, Konfiguration: Debug Win32 ------
2>Die Zwischen- und Ausgabedateien für das Projekt "CppManaged" mit der Konfiguration "Debug|Win32" werden gelöscht.
2>Kopieren von "c:\LocalProjects\mysolution\UnmanagedCpp\Debug\unmanaged.dll" in das Zielverzeichnis...
2>Kopieren von "c:\LocalProjects\mysolution\UnmanagedCpp\Debug\unmanaged.pdb" in das Zielverzeichnis...
2>Kompilieren...
2>Stdafx.cpp
2>Kompilieren...
...

这是发布模式的相同日志:

2>------ Neues Erstellen gestartet: Projekt: CppManaged, Konfiguration: Release Win32 ------
2>Die Zwischen- und Ausgabedateien für das Projekt "CppManaged" mit der Konfiguration "Release|Win32" werden gelöscht.
2>Kompilieren...
2>Stdafx.cpp
2>Kompilieren...
...

在调试模式下,会复制 dll 和 pdb 文件,但没有为此定义构建前或构建后事件。

【问题讨论】:

  • 多年来,我一直在处理原生、托管和 C++/CLI 项目的解决方案。我从来没有能够解决“黑魔法”并开始依赖构建事件。

标签: c# visual-studio visual-studio-2008 c++-cli dependencies


【解决方案1】:

通过 Build -> Configuration Manager 检查您的构建配置。

从活动解决方案配置中选择发布。

应该在构建和发布(构建列)中选择所有项目。

【讨论】:

  • 它们都被选中了,如果我点击rebuild,它们都会被构建。但是在调试时,各个 dll 会在不同的目标目录之间复制,而在发布时它们不是
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2014-04-19
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
相关资源
最近更新 更多