Visual studio 2010 TFS Build 2010-部署前缩小JS/CSS
我已经掌握了Ajax缩小器,以便在构建/打包/部署过程中缩小一些JS和CSS文件。这是一个很好的工具,完全符合我们的需要。然而,将其集成到构建/部署过程中是非常困难的 理想情况下,当我们执行一个TFS2010构建(即不是在开发机器上的本地(Ctrl+Shift+B jobbie)构建)时,我们只希望运行此工具。此外,我们希望在这种情况下,将当前“未缩小”的文件替换为缩小的文件(即,使用相同的文件名),而不是加载名为“.min.js”等的其他文件 经过大量阅读,我认为关键在于工作流中的定制构建任务——但我不知道如何实现这一点——特别是当我希望缩小文件时,这些文件将作为TFS 2010构建的一部分直接从TFS中的发布分支(即,不在某人的本地工作区)中下拉 这是我发现的与我试图实现的目标最接近的讨论:Visual studio 2010 TFS Build 2010-部署前缩小JS/CSS,visual-studio-2010,tfs,tfsbuild,microsoft-web-deploy,Visual Studio 2010,Tfs,Tfsbuild,Microsoft Web Deploy,我已经掌握了Ajax缩小器,以便在构建/打包/部署过程中缩小一些JS和CSS文件。这是一个很好的工具,完全符合我们的需要。然而,将其集成到构建/部署过程中是非常困难的 理想情况下,当我们执行一个TFS2010构建(即不是在开发机器上的本地(Ctrl+Shift+B jobbie)构建)时,我们只希望运行此工具。此外,我们希望在这种情况下,将当前“未缩小”的文件替换为缩小的文件(即,使用相同的文件名),而不是加载名为“.min.js”等的其他文件 经过大量阅读,我认为关键在于工作流中的定制构建任务
我相信我需要在构建工作流中创建一个自定义代码活动,但不知道如何创建一个来解决此问题。有人能解释一下在部署之前允许缩小的流程吗?将此作为自定义代码活动当然是可行的,但您必须为此付出一些努力。我的建议是:
请让我知道这对您有何影响。将此作为自定义代码活动当然是可行的,但您必须为此付出一些努力。我的建议是:
请让我知道这对您有何影响。您需要实现一个
调用流程活动
,以便在TFS构建期间执行Minifier
为此,您还必须在进行构建的服务器上安装minifier,即所谓的构建代理。通过这样做,您将确保Minifier仅在TFS构建期间被调用(与本地VS构建相反)
为了重命名生成的输出文件(*.min.js),您需要为此实施另一个自定义活动。
覆盖签入文件需要首先使其可写,这意味着还有另一个自定义活动(我已经在一个代码段中提供了)
整个编舞是使用InvokeProcess调用缩微器-->使签入文件可写-->使用重命名的缩微文件覆盖签入文件 在TFS构建中实现这一点的正确方法是将它们包装成
序列
可以找到一篇关于如何实现调用过程的介绍性博文。
我还发现了E.Hofman的真正价值。您需要实现一个调用流程活动
,以便在TFS构建期间执行Minifier
为此,您还必须在进行构建的服务器上安装minifier,即所谓的构建代理。通过这样做,您将确保Minifier仅在TFS构建期间被调用(与本地VS构建相反)
为了重命名生成的输出文件(*.min.js),您需要为此实施另一个自定义活动。
覆盖签入文件需要首先使其可写,这意味着还有另一个自定义活动(我已经在一个代码段中提供了)
整个编舞是
使用InvokeProcess调用缩微器-->使签入文件可写-->使用重命名的缩微文件覆盖签入文件
在TFS构建中实现这一点的正确方法是将它们包装成序列
可以找到一篇关于如何实现调用过程的介绍性博文。
我还发现E.Hofman的研究成果具有实际价值。好的-多亏了这些答案和大量的研究。。。我得出了以下解决方案:)
从自定义代码活动开始,我尝试从C#代码运行minifier,然后作为工作流的一部分调用该活动。这不起作用,因为.dll版本的minifier公开了两种压缩.js和.css文件的方法,然后让您打开一个
$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}
SourcesDirectory + "/" + "MyProjectFolder/Scripts"