如何单独构建每个项目

时间:2015-08-13 14:55:03

标签: c# f#-fake

我有几个包含同名文件的测试项目:“loc.xml”。 如果我构建所有测试项目,那么每次都会覆盖我的“loc.xml”。

有没有办法在单独的文件夹中构建每个项目?

实际上我用它:

Target "BuildUnitTests" (fun _ ->
   trace "Building unit tests..."
   !! @"source\test\**\*.csproj"
     |> MSBuildRelease BuildParams.TestsOutputDir "Rebuild"
     |> Log "AppBuild-Output: "
)

2 个答案:

答案 0 :(得分:1)

您可以通过从!! @"source\test\**\*.csproj"遍历glob中的每个项目并指定构建目录作为MSBuild的选项来执行此操作。

这是一个非常基本的build.fsx文件,可执行以下操作:

  • 全局模式source/test/**/*.csproj
  • 的所有文件
  • 迭代glob并将其发送到解析单元测试文件名的函数
  • 将构建目录设置为bin/PROJECT_NAME
  • 将项目文件发送到MSBuild函数,其参数使其以Release模式构建,这是输出目录的一个选项。

运行它之后,你应该在bin中有一堆子文件夹,这些子文件夹被命名为您的单元测试项目名称,每个相应版本的工件应该在正确的文件夹中。

#I "packages/FAKE/tools"
#r "FakeLib.dll"

open System.IO
open Fake

let buildProject (projectName : string) =
    // Just setting a release configuration by default...
    let properties = [ ("Configuration", "Release") ]

    let bareName = Path.GetFileNameWithoutExtension(projectName)
    let buildDir = sprintf "bin/%s" bareName
    trace <| sprintf "Building %s" bareName

    // MSBuildHelper's functions all expect a list so you have to pass
    // projectName as part of a list.
    // We are using 'naked' MSBuild so we have to specify all the
    // options/arguments ourselves
    MSBuild buildDir "Rebuild" properties [projectName]
    |> ignore

Target "Build" <| fun () ->
    !! "source/test/**/*.csproj" 
    |> Seq.iter buildProject

Target "All" DoNothing
"Build" ==> "All"

RunTargetOrDefault "All"

答案 1 :(得分:0)

如果您使用的是Visual Studio,则应自动将不同的项目内置到不同的文件夹中。

但是,您可以在属性(项目属性 - &gt; build - &gt;输出路径)中更改每个项目的构建路径。