2016-04-28 63 views
3

我試圖使用CopyDir將我的構建工件複製到輸出目錄。將FileIncludes轉換爲filefilter謂詞

我不知道我該如何定義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 ???? )

如何把文件包括設置並將其轉換成一個匹配的語句?

回答

0

爲什麼需要爲複製輸出創建單獨的目標,而您可以在構建目標本身中設置輸出目錄(如MSBUILD的示例)。 你可以根據(在應用程序的根例如,對於構建腳本)構建腳本的位置設置路徑像OUTDIR和源代碼路徑

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

請參閱http://fsharp.github.io/FAKE/apidocs/fake-msbuildhelper.html獲取更多信息。

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"))

可能還有其他指定文件的方法。但是這個工作對我來說。