将FileIncludes转换为filefilter谓词

时间:2016-04-28 18:32:15

标签: f#-fake

我尝试使用CopyDir将构建工件复制到输出目录。

我不确定我应该如何定义CopyDir作为参数的过滤谓词。我查看了文档并尝试在Google上搜索许多不同的关键字。

Target "Copy-Build-Output" (fun _ -> let baseDir = (sourceDir + @"Trunk\Webroot") let outputfiles = !! (sourceDir @@ "**/*.*") -- (sourceDir @@ "**/*.cs") -- (sourceDir @@ "**/*.csproj") -- (sourceDir @@ "**/*.vspscc") -- (sourceDir @@ "**/*.cssscc") -- (sourceDir @@ "web.config") -- (sourceDir @@ "bin/*.xml") -- (sourceDir @@ "obj/**") CopyDir outputDir baseDir ???? )

如何获取文件包含集并将其转换为匹配语句?

2 个答案:

答案 0 :(得分:0)

为什么需要为复制输出创建单独的目标,同时可以在构建目标本身中设置输出目录,如下所示(MSBUILD的示例)。 您可以根据构建脚本的位置设置OutDir和sourcecode路径之类的路径(应用程序根目录下的构建脚本示例)

 Target "Build" (fun _ -> 
!! "**/*.csproj"
-- "**/*.Tests.csproj"
    |> MSBuildRelease OutDir "Rebuild"
    |> Log "Building Projects: "

请参阅http://fsharp.github.io/FAKE/apidocs/fake-msbuildhelper.html了解详情。

答案 1 :(得分:0)

如果要复制每个文件(例如*.*),则(fun x -> true)的过滤谓词就足够了。

Target "Copy-Build-Output" (fun _ ->
    let baseDir = (sourceDir + @"Trunk\Webroot")
    let outputfiles =
        !! (sourceDir @@ "**/*.*")
          -- (sourceDir @@ "**/*.cs")
          -- (sourceDir @@ "**/*.csproj")
          -- (sourceDir @@ "**/*.vspscc")
          -- (sourceDir @@ "**/*.cssscc")
          -- (sourceDir @@ "web.config")
          -- (sourceDir @@ "bin/*.xml")
          -- (sourceDir @@ "obj/**")
    CopyDir outputDir baseDir (fun x -> true)
)

过滤谓词是一个函数string -> bool。这是以string作为输入并返回bool的任何函数。

因此,对于仅复制.png张图片,您可以使用(fun x -> x.EndsWith(".png"))

可能还有其他指定文件的方法。但这对我有用。