ตกลง - ขอบคุณคำตอบเหล่านี้และการวิจัยมากมาย... ฉันมาถึงวิธีแก้ปัญหาต่อไปนี้ :)
เริ่มต้นด้วยกิจกรรมโค้ดแบบกำหนดเอง ฉันพยายามเรียกใช้ตัวย่อจากโค้ด C# จากนั้นจึงเรียกกิจกรรมนั้นเป็นส่วนหนึ่งของเวิร์กโฟลว์ สิ่งนี้ใช้งานไม่ได้เนื่องจากตัวย่อเวอร์ชัน .dll แสดงวิธีการสองสามวิธีในการบีบอัดไฟล์ .js และ .css จากนั้นทำให้คุณเปิด StreamWriter บางประเภทและเขียนไฟล์ใหม่ด้วยสตริงที่บีบอัดที่ส่งคืนมาจาก วิธีการ (หากคุณต้องการเขียนทับไฟล์ที่มีอยู่) การเปิดและปิดไฟล์ค่อนข้างเข้มข้นตลอดทั้งวัน ดังนั้นฉันจึงไม่ค่อยพอใจกับวิธีแก้ปัญหานั้น การใช้คลาสกระบวนการเพื่อรัน .exe โดยเปิดตัวเลือก -clobber (สำหรับการเขียนทับไฟล์) ก็ไม่เหมาะเช่นกัน และให้ผลลัพธ์ที่แปลก (ไม่ย่อขนาดไฟล์อย่างถูกต้องและเขียนขยะที่ส่วนหัวของแต่ละไฟล์)
คุณถามวิธีแก้ปัญหาที่ฉันตัดสินใจคือการเขียนสคริปต์ PowerShell (จุดเริ่มต้นที่ฉันได้รับจาก ที่นี่ - ซึ่งฉันแก้ไขเล็กน้อยเพื่อใช้พารามิเตอร์บรรทัดคำสั่ง - ซึ่งจะเป็นโฟลเดอร์รูทของโครงการของคุณ สคริปต์จะวนซ้ำผ่านแต่ละไฟล์ (และไฟล์ของไดเรกทอรีย่อยแต่ละไฟล์) และลดขนาด .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
ขั้นตอนใน รันสคริปต์ PowerShell ใน TFS คุณสามารถส่งพารามิเตอร์ของคุณใน (ไดเร็กทอรีเพื่อเริ่มย่อขนาด) โดยใช้คุณสมบัติ Arguments ของกิจกรรม InvokeProcess
หากต้องการรับไดเร็กทอรีที่บิลด์ TFS ใช้เพื่อคอมไพล์โค้ดของคุณก่อนที่จะเผยแพร่ (พื้นที่ทำงานชั่วคราว หากคุณต้องการ) คุณสามารถใช้ตัวแปร SourcesDirectory ที่คุณสามารถใช้ได้ในลำดับ Run On Agent ของบิลด์ นี่คือตำแหน่งที่ไฟล์ของคุณได้รับการคอมไพล์และจัดทำแพ็กเกจโดยกระบวนการสร้าง TFS ดังนั้นสิ่งใดก็ตามที่ได้รับการย่อขนาดที่นี่จะจบลงในแพ็คเกจการปรับใช้ขั้นสุดท้าย
ป.ล. - SourcesDirectory ค่อนข้างสูง - คุณอาจไม่ต้องการเจาะลึกไปจนถึงไฟล์ .js และ .css ของคุณ ดังนั้นคุณต้องระบุสิ่งที่ชอบ:
SourcesDirectory + "/" + "MyProjectFolder/Scripts"
ตรวจสอบให้แน่ใจว่าคุณเพิ่มขั้นตอน InvokeProcess นี้ก่อนที่โค้ดของคุณจะถูกปรับใช้ในเวิร์กโฟลว์และเฮ้เพรสโต - คุณจะมีไฟล์ .js และ .css ที่ย่อขนาด ซึ่งเก็บชื่อไฟล์ต้นฉบับไว้เป็นส่วนหนึ่งของบิลด์ TFS เท่านั้น ไม่ใช่ไฟล์ในเครื่อง .
ขอบคุณทุกท่านที่ตอบและชี้แนะให้ผมไปในทิศทางที่ถูกต้อง ฉันหวังว่านี่จะช่วยใครสักคนได้ตลอดทาง!
person
harman_kardon
schedule
22.09.2011