Visual studio 2010 TFS Build 2010-部署前缩小JS/CSS

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”等的其他文件 经过大量阅读,我认为关键在于工作流中的定制构建任务

我已经掌握了Ajax缩小器,以便在构建/打包/部署过程中缩小一些JS和CSS文件。这是一个很好的工具,完全符合我们的需要。然而,将其集成到构建/部署过程中是非常困难的

理想情况下,当我们执行一个TFS2010构建(即不是在开发机器上的本地(Ctrl+Shift+B jobbie)构建)时,我们只希望运行此工具。此外,我们希望在这种情况下,将当前“未缩小”的文件替换为缩小的文件(即,使用相同的文件名),而不是加载名为“.min.js”等的其他文件

经过大量阅读,我认为关键在于工作流中的定制构建任务——但我不知道如何实现这一点——特别是当我希望缩小文件时,这些文件将作为TFS 2010构建的一部分直接从TFS中的发布分支(即,不在某人的本地工作区)中下拉

这是我发现的与我试图实现的目标最接近的讨论:


我相信我需要在构建工作流中创建一个自定义代码活动,但不知道如何创建一个来解决此问题。有人能解释一下在部署之前允许缩小的流程吗?

将此作为自定义代码活动当然是可行的,但您必须为此付出一些努力。我的建议是:

  • 首先关注Ewald Hofman在的TFS 2010定制博客,了解如何创建定制活动
  • 然后看一下同一系列文章中的实现机制,以查找符合特定模式的所有文件。在该示例中,assemblyInfo.cs文件被编入索引并更改其内容。通过搜索你的*.js文件来替换它
  • 在您选择的文件上释放Ajax Minifier的功能,并用缩小的文件替换原始文件
  • 构建活动,将其作为一个步骤包含在您在TFS 2010中使用的构建过程模板中(也在相同的博客文章中描述),并将其微调到您满意的程度
  • 或者,您可以要求您在问题中包含的帖子的作者与我们分享他创建的Minifier TFS活动:-)


    请让我知道这对您有何影响。

    将此作为自定义代码活动当然是可行的,但您必须为此付出一些努力。我的建议是:

  • 首先关注Ewald Hofman在的TFS 2010定制博客,了解如何创建定制活动
  • 然后看一下同一系列文章中的实现机制,以查找符合特定模式的所有文件。在该示例中,assemblyInfo.cs文件被编入索引并更改其内容。通过搜索你的*.js文件来替换它
  • 在您选择的文件上释放Ajax Minifier的功能,并用缩小的文件替换原始文件
  • 构建活动,将其作为一个步骤包含在您在TFS 2010中使用的构建过程模板中(也在相同的博客文章中描述),并将其微调到您满意的程度
  • 或者,您可以要求您在问题中包含的帖子的作者与我们分享他创建的Minifier TFS活动:-)


    请让我知道这对您有何影响。

    您需要实现一个
    调用流程活动
    ,以便在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"