確定 - 感謝這些答案和大量的研究......我來到了以下解決方案:)
與自定義代碼活動的開始,我試圖運行從C#代碼minifier然後叫活動作爲工作流程的一部分。這不起作用,因爲.min版本的.dll版本公開了一些壓縮.js和.css文件的方法,然後使您打開某種類型的StreamWriter,並使用從其返回的壓縮字符串重寫該文件該方法(如果你想覆蓋你現有的文件)。相當密集的開放和關閉文件全天,所以我不大滿意該解決方案。使用進程類來運行帶有-clobber選項的.exe(用於覆蓋文件)並不理想,並且產生了一些奇怪的結果(不正確地縮小文件並在每個文件的頭部寫入一些垃圾)。所以,你問,我解決的解決方案是編寫一個PowerShell腳本(我從here得到的開始 - 我稍微修改了一個命令行參數 - 這將是根文件夾。您的項目腳本通過每個文件(每個子目錄中的文件)遞歸去和minifies的.css和.js文件裏面整齊漂亮的骨頭這看起來是這樣的:。
$ScriptDirectory = $args[0]
Write-Host "Validating directory parameter: $ScriptDirectory"
Write-Host ""
if ((Test-Path -path $ScriptDirectory) -ne $True)
{
#Throw an error of some kind (the parameter passed in isn't a valid directory).
}
$Minifier = 「C:\Program Files\Microsoft\Microsoft Ajax Minifier 4\AjaxMin.exe」
get-childitem $ScriptDirectory -recurse -force -include *.js, *.css -exclude *.min.js, *.min.css | foreach-object {&$Minifier $_.FullName -out $_.FullName -clobber}
所以我們去通過擴展名爲.js或.css的根文件夾中的每個子項目(忽略.min。*的擴展名,因爲它們已經被壓縮)。
在TFS中,我們所需要做的就是將一個InvokeProcess
步驟添加到execute the PowerShell script in TFS。您可以使用InvokeProcess活動的Arguments屬性傳遞參數(目錄中開始縮小)。
要獲取TFS構建在編譯代碼之前編譯代碼的目錄(臨時工作空間,如果您喜歡),可以在構建的Run On Agent序列中使用可用的SourcesDirectory變量。這是您的文件由TFS構建過程編譯和打包的位置,因此在此處縮小的任何內容都將在最終部署包中結束。
PS - 的SourcesDirectory是相當高的了 - 你可能不希望一路從那裏深入到你的.js和.css文件,所以你mgiht需要指定類似:
SourcesDirectory + "/" + "MyProjectFolder/Scripts"
確保在代碼部署到工作流程之前添加此InvokeProcess步驟,並且嘿-presto - 您將縮小.js和.css文件,這些文件僅將原始文件名稱保留爲TFS構建的一部分,而不是本地文件名稱。
非常感謝所有回答並指出我正確的方向。我希望這可以幫助一路上的人!
我很樂意分享......但我是爲了工作而做的。但我會爲你們(以及TFS社區擴展)「重寫」它。什麼是最好的地方呢? Git的?引擎收錄? –