Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 将解决方案中的所有项目EXE和DLL文件复制到一个公用文件夹的最佳方法?_Visual Studio_Copy_Project_Post Build Event_Project Files - Fatal编程技术网

Visual studio 将解决方案中的所有项目EXE和DLL文件复制到一个公用文件夹的最佳方法?

Visual studio 将解决方案中的所有项目EXE和DLL文件复制到一个公用文件夹的最佳方法?,visual-studio,copy,project,post-build-event,project-files,Visual Studio,Copy,Project,Post Build Event,Project Files,我有一个C#Visual Studio解决方案,包含大约15个项目。构建解决方案时,我希望每个项目的所有DLL和EXE文件都转到一个公共文件夹(称为Deploy) 我考虑这样做的方式是,对于每个项目的生成后事件命令行部分,输入以下命令: IF NOT EXIST $(SolutionDir)Deploy ( 'If directory does not exist, create it MKDIR $(SolutionDir)Deploy ) ELSE ( 'Delete

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

我考虑这样做的方式是,对于每个项目的生成后事件命令行部分,输入以下命令:

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++ MaFrimeProject。我将这种类型的项目添加到我的解决方案中,并单击“项目属性”页面,发现在“配置属性->NMake”下有一个包含以下内容的部分:

  • 生成命令行
  • 重新生成所有命令行
  • 清除命令行
使用Makefile项目的命令行选项会产生与上述类似的问题。许多不同的命令用于复制my 15 project的每个输出文件,例如:

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项目的命令行命令似乎是用于生成事件,而不是用于生成后事件,所以我完全放弃了这个想法

然后我尝试使用VisualStudio安装程序项目。在将项目添加到我的解决方案后,我右键单击该项目,看到有一个Add->project输出。。。选项这将打开一个对话框,允许我添加另一个项目的主要输出之一。我在我的其他项目中都重复了这一点,并重建了它

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

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

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

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

多谢各位


P.S.I认为我可以做一个批处理文件来搜索并复制所有的EXE和DLL文件到部署文件夹,但是我必须在VisualStudioIDE之外运行批处理文件,并且硬编码配置文件夹(调试或部署)。< /P> < P>不能只更改C++项目的输出目录吗?看

  • 在菜单栏上,选择“项目”、“属性”
  • 展开“配置属性”节点,然后选择“常规”
  • 将输出目录值更改为新的输出目录
如果需要这两个选项,还可以为VS项目和解决方案创建多个配置,类似于标准的“调试”和“发布”配置。从现有配置之一创建新配置,然后更改输出目录并保存。现在,您可以在解决方案级别切换配置,以构建到另一个目录中。有关详细步骤,请参见此链接:


谢谢你的建议!我简单地考虑过这一点,但我也喜欢将每个项目的构建放在各自独立的输出文件夹中。我将研究你建议的链接并阅读更多内容。可能有一个选项可以让每个项目的生成转到多个文件夹(默认文件夹和公用文件夹)。再次感谢您的回复!您的解决方案可以工作,但是它有一个类似于为每个项目使用自定义生成后步骤的问题。它要求我配置每个单独的项目。我意识到这将是我只需要做一次的事情,但正如我在最初的帖子中所说的,我想找到“最好”或“最简单”的方法来做这件事,并且只需要更改一个项目的设置,而不是所有项目的设置对我来说似乎更具吸引力。我想我会保持目前的状态。复制文件并忽略生成的MSI文件的安装程序项目。谢谢。:)