ОК - благодаря этим ответам и большому количеству исследований ... Я пришел к следующему решению:)
Начиная с операций с пользовательским кодом, я попытался запустить минификатор из кода 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, поэтому все, что здесь будет минимизировано, попадет в окончательный пакет развертывания.
P.S. Каталог SourcesDirectory достаточно высок - вам, возможно, не захочется проходить весь путь оттуда, чтобы добраться до ваших файлов .js и .css, поэтому вам нужно указать что-то вроде:
SourcesDirectory + "/" + "MyProjectFolder/Scripts"
Убедитесь, что вы добавили этот шаг InvokeProcess до того, как ваш код был развернут в рабочем процессе, и вы должны минимизировать файлы .js и .css, которые сохраняют исходные имена файлов только как часть сборки TFS, а не местный.
Большое спасибо всем, кто ответил и указал мне правильное направление. Я надеюсь, что это поможет кому-то на этом пути!