使用MSBuild或F#Script或Anything创建自定义VS2012解决方案?

时间:2013-10-16 02:22:21

标签: visual-studio-2012 msbuild f# projects-and-solutions

我有一个库,其中包含如何使用该库以及单元测试的示例。

我正在尝试创建将在部署中的自定义VS2012解决方案。

根据启动部署时给出的输入,我希望能够创建解决方案 - 例如Samples.sln - 包括输入文件中指定的项目。

示例:

//inputfile1.txt
ProjectA    
ProjectB

我运行MSBuild xml文件或F#脚本(或任何可以执行此操作的脚本),我得到一个包含ProjectA,ProjectA.Tests,ProjectB,ProjectB.Tests的Samples.sln的Samples目录

如果我用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是否能够使用A?

1 个答案:

答案 0 :(得分:1)

你应该明白,MsBuild主要是一个构建平台。它也恰好能够读写文件等,但这不是它的核心业务。因此,当你可以为它生成解决方案文件时,使用只是 MsBuild会很难,因为它根本不能直接做这样的事情。

这是一个选项C:如果你在文本编辑器中打开一个sln,你会发现结构非常简单:每个项目都有一个Project ... EndProject。您可以在MsBuild目标中以适当的格式生成这些字符串(即genareate guid,找出解决方案的相对路径,从路径获取项目名称,...),将所有这些字符串放入ItemGroup然后将其写入a使用WriteLinesToFile的解决方案文件。完全可能,但很多工作,我不会推荐它。

对于您的选项A,这更难:从构建中包含/排除项目,VisualStudio使用.suo文件,这些文件是一些二进制专有格式,我不知道如何生成。

这给你留下选项B,它基本上是选项C,但没有重新发明轮子:找到一个工具,可以为选定的项目生成解决方案文件,并让MsBuild使用Exec调用它。可能有很多工具可以做到这一点,但这里有一个例子,使用我在互联网上找到的第一个可用的名为SolutionMaker的例子。假设您的项目位于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.