【问题标题】:Create Custom VS2012 Solutions Using MSBuild or F# Script or Anything?使用 MSBuild 或 F# 脚本或任何东西创建自定义 VS2012 解决方案?
【发布时间】:2013-10-16 02:22:20
【问题描述】:

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

我正在尝试创建将在部署中使用的自定义 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 吗?

【问题讨论】:

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


    【解决方案1】:

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

    这是一个选项 C:如果您在文本编辑器中打开一个 sln,您会看到结构非常简单:每个项目都有一个 Project ... EndProject。您可以在 MsBuild 目标中以适当的格式生成这些字符串(即,生成 guid,找出解决方案的相对路径,从路径获取项目名称,...),将它们全部放入 ItemGroup 然后将其写入使用 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2015-05-24
      • 2011-05-08
      • 2011-09-15
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多