Visual studio 2012 使用MSBuild或F#脚本或任何东西创建自定义VS2012解决方案?
我有一个库,其中包括如何使用库以及单元测试的示例 我正在尝试创建将在部署中使用的自定义VS2012解决方案 根据启动部署时给出的输入,我希望能够创建一个解决方案(例如Samples.sln),其中包括输入文件中指定的项目 例如:Visual studio 2012 使用MSBuild或F#脚本或任何东西创建自定义VS2012解决方案?,visual-studio-2012,msbuild,f#,projects-and-solutions,Visual Studio 2012,Msbuild,F#,Projects And Solutions,我有一个库,其中包括如何使用库以及单元测试的示例 我正在尝试创建将在部署中使用的自定义VS2012解决方案 根据启动部署时给出的输入,我希望能够创建一个解决方案(例如Samples.sln),其中包括输入文件中指定的项目 例如: //inputfile1.txt ProjectA ProjectB 我运行了一个MSBuild xml文件或一个F#脚本(或任何可以这样做的东西),得到了一个Samples目录,其中Samples.sln包含ProjectA、ProjectA.Tests、P
//inputfile1.txt
ProjectA
ProjectB
我运行了一个MSBuild xml文件或一个F#脚本(或任何可以这样做的东西),得到了一个Samples目录,其中Samples.sln包含ProjectA、ProjectA.Tests、ProjectB、ProjectB.Tests
如果我使用ProjectX和Project7提供输入文件,也会发生类似的情况。。。等等
使用MSBuild,我已经了解了如何读取文件输入、将项目文件夹复制到新文件夹,以及在整个过程中需要做的其他一些事情,但我不知道如何创建和自定义解决方案。我不确定使用MSBuild是否可以做到这一点——我想我只能修改一个已经存在的解决方案(但我在这方面也遇到了麻烦)
我想我有以下选择:
A. Add all projects to a Samples solution, then use msbuild to turn them on or off
or
B. There exists some other way (not using msbuild) to do this whole process
msbuild是否甚至可以使用生成平台?您应该了解,msbuild主要是一个生成平台。它还能够读写文件等,但这不是它的核心业务。因此,虽然您可以为它生成解决方案文件,但仅使用MsBuild将非常困难,因为它根本无法直接执行类似的操作 这里有一个选项C:如果你在文本编辑器中打开一个sln,你会看到它的结构非常严格:每个项目都有一个
项目。。。EndProject
。您可以在MsBuild目标中以正确的格式生成这些字符串(即,genreate guid,找出解决方案的相对路径,从路径获取项目名称,…),将它们全部放在项目组中,然后使用WriteListFile将其写入解决方案文件。完全有可能,但工作量很大,我不推荐
对于您的选项A,这更难:要从构建中包括/排除项目,VisualStudio使用.suo
文件,这些文件是一些二进制专有格式,我不知道如何生成
这就给您留下了选项B,基本上是选项C,但没有重新发明轮子:找到一个可以为所选项目生成解决方案文件的工具,并让MsBuild使用Exec
调用它。可能有很多工具可以做到这一点,但这里有一个例子,使用了我在互联网上找到的第一个可用工具,名为。假设您的项目位于目录Foo中,您可以这样使用它:
<Exec Command="SolutionMaker /s Foo/foo.sln /p Foo /v 2012"/>
因为相应的命令行选项是
/s <solution>: Solution file path
/p <path>: project root path
/v <fileVersion>: New solution file will be generated in the specified format.
valid versions: 2008, 2010, 2012.
/s:解决方案文件路径
/p:项目根路径
/v:将以指定格式生成新的解决方案文件。
有效版本:2008、2010、2012。