Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 2012 使用MSBuild或F#脚本或任何东西创建自定义VS2012解决方案?_Visual Studio 2012_Msbuild_F#_Projects And Solutions - Fatal编程技术网

Visual studio 2012 使用MSBuild或F#脚本或任何东西创建自定义VS2012解决方案?

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

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

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

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

例如:

//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。