1

我有一个包含大约 15 个项目的 C# Visual Studio 解决方案。当我构建解决方案时,我希望每个项目的所有 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 个项目,并且会将其放在每个单独项目的构建后事件部分中,而且,每次我添加一个新项目时,我都必须记住为它做同样的事情.

我检查了解决方案文件属性,但没有看到设置解决方案范围的构建后事件以复制所有文件的方法,因此我进行了一些 Google 搜索。

一页说使用 C++ Makefile项目。我将这种类型的项目添加到我的解决方案中,然后单击项目属性页面,发现在Configuration Properties->NMake下有一个部分,内容如下:

  • 构建命令行
  • 重建所有命令行
  • 干净的命令行

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

COPY /Y $(SolutionDir)Project1\bin\$(ConfigurationName)\*.exe $(SolutionDir)Deploy
COPY /Y $(SolutionDir)Project2\bin\$(ConfigurationName)\*.exe $(SolutionDir)Deploy
...
COPY /Y $(SolutionDir)Project15\bin\$(ConfigurationName)\*.exe $(SolutionDir)Deploy

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

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

然后我尝试使用Visual Studio 安装程序项目。将项目添加到我的解决方案后,我右键单击该项目并看到有一个Add->Project Output...选项。这带来了一个对话框,允许我添加我的另一个项目的主要输出之一之一。我对我的其他每个项目都重复了这一点并进行了重建。

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

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

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

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

谢谢你。

PS 我在想我可以只制作一个批处理文件来搜索所有 EXE 和 DLL 文件并将其复制到 Deploy 文件夹,但我必须在 Visual Studio IDE 之外运行批处理文件并硬编码配置文件夹(调试或部署)。

4

1 回答 1

1

您不能只更改 C++ 项目的输出目录吗?请参阅如何:更改构建输出目录

  • 在菜单栏上,选择项目、属性。
  • 展开配置属性节点,然后选择常规。
  • 将输出目录值更改为新的输出目录。

如果您想要这两个选项,您还可以为您的 VS 项目和解决方案创建多个配置,类似于标准的“调试”和“发布”配置。从现有配置之一创建新配置,然后更改输出目录并保存。现在您可以在解决方案级别切换配置以构建到另一个目录。有关详细步骤,请参阅此链接:

如何:创建和编辑配置

于 2014-07-04T05:26:57.703 回答