2013年12月25日 星期三

NuGet操作 - Extending擴展

這次要提到的,是NuGet的封裝擴展,有些封裝的安裝新指令可以在Package Manager Console window中使用新的命令。像是MvcScaffolding這樣的封包,可以用建立命令來生成ASP.NET MVC的控制器和視圖命令。下圖顯示了安裝MvcScaffolding創建一個新的命令Scaffold,完成tab expansion。

創建一個PowerShell腳本擴展,該模塊ClassNamer.psm1的代碼如下所示:

function Get-ClassName {

    $ie = new-object -com InternetExplorer.Application

    $ie.navigate("http://www.classnamer.com/")

    if (!$ie) { Write-Host "variable is null" }

    while ($ie.Busy -eq $true)

    {

        Start-Sleep -Milliseconds 1000;

    }



    $doc = $ie.Document

    if (!$doc)

    {

        Write-Host "variable is null"

        return "SorryCantGiveYouAGenericClass"

    }

    $answer = $doc.getElementByID("classname")

    return $answer.innerHtml


}

Export-ModuleMember Get-ClassName

有兩部分此代碼,函數的定義和定義 public函數,從模塊組的導出命令。這裡是Get-類名函數的簡短描述:


  • 建立一個IE Object
  • 瀏覽獲得頁面
  • 睡眠而忙碌(或許應該加上一個最大循環計數器)
  • 得到的文檔,這是web頁面的DOM
  • 查詢相關元素的doc Object和取得的Value


接下來的部分是寫獲得該模組導入的Script,init.ps1到Package Manager Console,該代碼如下所示:

param($installPath, $toolsPath, $package, $project)


Import-Module(Join-Path $toolsPath ClassNamer.psm1)


當上述Script運行時,將導入模塊ClassNamer.psm1。現在需要做的就是把兩個PowerShell的文件放在一個文件夾的工具,並在同一個文件夾中,執行了NuGet的命令規範ClassNamer tools文件夾。該命令將產生一個ClassNamer.nuspec文件的default metadata。當我們在ClassNamer.nuspec執行NuGet pack,它會創建一個pack,其中包含工具文件夾,當我們在Visual Studio安裝的軟體包的init.ps1腳本會被NuGetybgz執行行和安裝模組。如果部驟正確,將能夠看到已經安裝的軟件包並運行新的Get-類名的命令。

-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言