最好的方式来复制所有项目EXE和DLL文件的解决方案,以一个共同的文件夹



我有一个c# Visual Studio解决方案,大约有15个项目。当我构建解决方案时,我希望每个项目的所有DLL和EXE文件都转到一个公共文件夹(称为Deploy)。

我考虑的方法是,对于每个项目的Post-build Event Command Line部分,输入以下命令:

IF NOT EXIST $(SolutionDir)Deploy (
    'If directory does not exist, create it
    MKDIR $(SolutionDir)Deploy
) ELSE (
    'Delete directory to make sure it's "clean"
    RMDIR /F /S /Q $(SolutionDir)Deploy
    MKDIR $(SolutionDir)Deploy
)
'Copy executable and required DLLs to Deploy directory
COPY /Y $(TargetPath) $(SolutionDir)Deploy
COPY /Y $(TargetDir)*.dll $(SolutionDir)Deploy

这样做的问题是,然而,我有15个项目,并将其放在每个单独项目的后构建事件部分,而且,每次我添加一个新项目,我必须记住为它做同样的事情。

我检查了解决方案文件属性,没有看到设置解决方案范围内的构建事件来复制所有文件的方法,所以我做了一些谷歌搜索。

有一页说使用c++ Makefile项目。我将这种类型的项目添加到我的解决方案中,并单击项目属性页面,发现在配置属性->NMake下有一个部分,如下所示:

  • 构建命令行
  • 重建所有命令行
  • 清洁命令行

使用Makefile项目的命令行选项会产生与上面类似的问题。许多不同的命令来复制我的15个项目的输出文件,例如:

COPY /Y $(SolutionDir)Project1bin$(ConfigurationName)*.exe $(SolutionDir)Deploy
COPY /Y $(SolutionDir)Project2bin$(ConfigurationName)*.exe $(SolutionDir)Deploy
...
COPY /Y $(SolutionDir)Project15bin$(ConfigurationName)*.exe $(SolutionDir)Deploy

这样做还有一个明显的问题。正如您所看到的,我利用了$(SolutionDir)和$(ConfigurationName)宏,但我必须硬编码每个项目名称。我没有看到任何宏,如$(AllProjects), $(AllProjectDirs)等

此外,Makefile项目的命令行命令似乎是用于构建的,而不是用于构建后的事件,所以我完全放弃了这个想法。

然后我尝试使用Visual Studio Installer项目。在将项目添加到我的解决方案后,我右键单击该项目,看到有一个Add-> project Output…选项。这将弹出一个对话框,允许我添加另一个项目的Primary Output。我在我的每个其他项目中重复了这个方法并重新构建。

结果是输出文件夹中有一个。msi文件。然后我打开安装程序项目属性并将Package files选项更改为作为松散的未压缩文件并重新构建。输出文件夹现在包含了我所有的项目的EXE和DLL文件!

大多数人会在这一点上感到满意并继续前进,但我是那种喜欢找到最好方法做事的人。

有一件事我不喜欢使用安装程序项目选项,事实上,除了从我所有的项目中复制文件,它还创建了一个MSI文件(我不需要),我没有看到任何选项告诉它不要创建一个。

谁能推荐另一个/更好的方法来完成我的目标复制所有项目输出文件到一个文件夹?

谢谢。

注:我想我可以只是做一个批处理文件来搜索和复制所有的EXE和DLL文件到Deploy文件夹,但我必须在Visual Studio IDE之外运行批处理文件,并硬编码配置文件夹(Debug或Deploy)。

你不能直接改变c++项目的输出目录吗?参见如何:更改生成输出目录。

  • 在菜单栏上,选择"工程","属性"。
  • 展开Configuration Properties节点,选择General。
  • 将Output Directory的值更改为新的输出目录

如果你想要两个选项,你也可以为你的VS项目和解决方案创建多个配置,类似于标准的"Debug"one_answers"Release"配置。从现有配置中创建一个新配置,然后更改输出目录并保存。现在,您可以在解决方案级别切换配置,将其构建到另一个目录中。有关详细步骤,请参阅此链接:

如何创建和编辑配置

最新更新