2011-02-10 52 views
10

我意识到这个问题以前有人问 - 但没有一个答案适用于我的具体情况:的Visual Studio:复制相关的DLL文件到目标文件夹

  • 我有一个包含本地C溶液++ EXE项目,而这又取决于40多个本地C++ DLL项目(在相同的解决方案中)。

  • 的EXE项目具有通常的调试推出(和资料)构型,但由于它们相同的源代码库是用来建立三种不同的应用程序(比如A1A2A3)。另外,它的目标是x32和x64,因此总共有3 x 3 x 2 = 18个项目配置。

  • 的DLL项目由所有三个目标应用程序共享,因此,只有3有(调试推出资料)次2(X32,X64)= 6级的配置。

  • 由于EXE项目依赖于DLL,所以无论何时修改,它都需要将DLL项目的相关输出复制到其目标文件夹(或其子文件夹)。

你将如何处理DLL的更新?

  • 每个DLL项目生成后动作不工作(井),因为它必须将DLL复制到的A1A2A3相关的输出文件夹。输出文件夹中的任何更改都会导致必须修改50个DLL项目中的每个项目中的生成后操作。

  • 我目前将DLL本身作为项目项添加到EXE项目中,并配置了一个自定义构建工具将其复制到输出文件夹。但是这需要我添加每个DLL 6次,所以我最终得到了6 x 50 = 300个DLL!

我真的需要的东西就像是复制本地选项,不幸的是只能运行程序集。您是否建议简化此构建设置?

回答

5

我会做的是把所有的DLL放在一个文件夹(特定于调试/发布等),并将它们复制回EXE的相应输出文件夹。

这只能在两个动作来完成:

  • 将所有的DLL输出目录到文件夹像$(ConfigurationName)_$(PlatformShortName)

    • 选择所有DLL项目
    • 右击 - > propoerties
    • 选择所有配置和所有平台
    • 设置outp UT DIR
  • 添加一个生成后行动的EXE工程,通用于所有配置,副本$(ConfigurationName)_$(PlatformShortName)\*.dll$(TargetDir)

编辑

有一个问题在第二因为你的EXE的$(ConfigurationName)与你的DLL项目不一样。不知道,但也许你可以有一种方法来推断相应的配置,以便为所有18个配置仍然有一个后期构建事件。它可以是一个新的SO问题:)

+0

非常好!为什么我以前没有考虑过这个问题? – 2011-02-10 11:02:46