0

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

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

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

例子:

//inputfile1.txt
ProjectA    
ProjectB

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

如果我用 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 吗?

4

1 回答 1

1

你应该明白MsBuild主要是一个构建平台。它也恰好能够读写文件等,但这不是它的核心业务。因此,虽然您可以为其生成解决方案文件,但使用MsBuild 将非常困难,因为它根本不意味着能够直接执行此类操作。

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

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

这给您留下了选项 B,它基本上是选项 C,但无需重新发明轮子:找到一个工具,可以为选定的项目生成解决方案文件,并让 MsBuild 使用Exec. 可能有很多工具可以做到这一点,但这里有一个使用我在 Internet 上找到的第一个可用工具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.
于 2013-10-16T08:16:05.540 回答