1. 程式人生 > 其它 >使用GUI工具高效構建你自己的Nuget包豐富包的基礎資訊新增要包含的檔案The end

使用GUI工具高效構建你自己的Nuget包豐富包的基礎資訊新增要包含的檔案The end

寫這篇文章的原因是我在學習構建nuget包的時候,發現了一個官方推薦的GUI工具,而官方的工具介紹文章已經過時,一些地方和現在最新版本的工具有些差異,所以特意利用假期最後一個下午寫下來,希望能幫助更多的人。畢竟,在我看來,從事..NET開發的很多朋友,並不是特別迷戀命令列這種看起來高大上但是實際上並沒有高效可言的東西(起碼在Windows平臺上是這樣吧)

下載與安裝

您可以導航到這裡下載並在線安裝這個工具包,我目前沒有找到離線安裝包,但是索性codeplex不像nuget那麼慘,時不時的被…是吧,你懂的!

在安裝完成後第一次啟動,會檢測你使用的是不是windows8系統,如果是會推薦你另外一個windows8應用,當然我個人並不習慣於使用windows8應用在開發機器上(我主要工作也不是開發windows8應用),所以這篇文章將使用最新版本的win32應用做介紹!

起始介面如下所示,比官方文件上那一個版本要酷炫多了,但是不止於酷炫哦

建立nuget工具包

豐富包的基礎資訊

在點選Create a new package後,是一個簡潔的介面

左邊部分,可以錄入一些包中的基礎資訊,包括:

包的ID:必須的唯一的ID,格式和C#名稱空間規範相同,在你釋出包的時候會去驗證唯一性。

版本號:必須的三段式的版本號,注意每次釋出必須大於上一次的版本號,否則將會被nuget駁回。

標題:非必需的,通常你可以讓它和ID保持一致,但是這不是強制的。

作者(s):必須的專案,以逗號分隔作者列表。

擁有者:你可以隨便寫,但是在釋出的時候會被你的nuget帳戶名替代。

最低客戶端版本:描述這個包限制的最低nuget客戶端版本。

iconUrl:一個32*32畫素的.png檔案地址,作為最終在nuget中顯示的圖示

描述、標籤、許可地址、專案地址,是否強制需要同意許可,這些都一目瞭然了,不多做介紹。

最後有兩項特別重要了;

Dependencies:依賴,這個包是否依賴其它的包,當然你可以把依賴的其他包直接拷貝包含進來,但是這就完全違背了nuget的初衷,如果你所依賴的專案沒有nuget包,你可以聯絡原作者後者幫助打包為nuget包。

Framework Assenbly Reference:這裡描述了在安裝這個包時會被同時引用的程式集,你可以按照不同的.NET Framework版本區分指定它們。下面給出我自己的包的一個示例:

新增要包含的檔案

在最終的nuspec檔案中,可以通過設定files的xml節點來逐個指定要包含的檔案,但是這樣nuget就會完全忽略按照文件結構的約定包含的檔案,在大多數情況下,我們不需要去手動指定它,但是在一些特殊的場合,你可能需要使用到它。

files節點可以包含file子節點,它包含src和target兩個屬性,來分別制定要包含的檔案路徑和目標路徑,在src中還可以使用*和**萬用字元,想要了解更詳細的說明,請參閱http://docs.nuget.org/docs/reference/nuspec-reference.

在nuget文件結構約定中,包含了如下三個資料夾:

lib:包含目標程式將要引用的dll檔案。

content:將按照文件結構複製到應用程式根目錄中的靜態檔案,但是如果檔案中包含了副檔名是.pp或者transform,那麼在將會轉換目標檔案。

tools:在解決方案或者專案中包含的一些powershell指令碼,以及一些可以在Nuget package console中訪問的應用程式。(您記得安裝完entity framework後的add-migration命令吧,就是由這裡提供的),但是powershell的編寫已經超出了本文的範圍,如果您想了解詳細情況,請google之。

在本文示例中,建立了content和lib資料夾

在lib資料夾中,我們可以指令在不同的.net framework版本中,要包含的不同檔案的引用,我們可以在任意目錄中包含它們,而並不只是在lib資料夾中。

而在新增這些資料夾的時候,可以通過右鍵點選資料夾,然後選擇Add .NET Folder快速的新增不同版本名字縮寫的資料夾,這是你使用命令列方式建立nuget包所享受不到的快捷的方式,很酷吧。GUI工具還提供了很多快捷的方式,有待各自探索了。

上文中提到過,黨Content資料夾中包含了字尾名為.transform的檔案時,nuget將會merge目標檔案,比如示例中使用的就是一個ASP.NET MVC擴充套件的包,它可以提供給ASP.NET MVC生成多選列表和單選列表的HtmlHelper(儘管把這個看成一個硬廣吧,地址),所以,我們需要在Visual studio新增這個包的時候,給MVC專案的Views目錄下的web.config檔案加一個HtmlHelper需要的名稱空間記錄,所以我編寫了如下內容的web.config.transform存放到content/Views目錄下

<?xml&nbsp;version="1.0"?>
<configuration>
    <system.web.webPages.razor>
        <pages&nbsp;pageBaseType="System.Web.Mvc.WebViewPage">
            <namespaces>
                <add&nbsp;namespace="ListControl.Extension"/>
            </namespaces>
        </pages>
    </system.web.webPages.razor>
</configuration>

當然你也可以定義一些字尾為.pp的檔案,來按一定規則生成程式碼,而且它還可以使用一些預定義的變數,會提供你生成專用於目標專案程式碼的有效工具。您可以在這裡找到更詳細的資訊。

釋出包

最後,使用GUI工具釋出包當然是簡單的令人髮指了,點選工具欄中的File->publish就可以簡單的釋出你定義的包了,Puslish key來自於你的nuget賬戶的個人資訊頁面

使用包

在VS中建立一個專案,開啟nuget package視窗,在搜尋框中輸入上文中定義的包ID:ListControlExtension或者直接在命令列工具中輸入命令:Install-Package ListControlExtension,就可以安裝並且使用這個擴充套件了.

上文中的包使用效果:

View檔案程式碼:

<div&nbsp;class="form-group">
    @Html.LabelFor(model => model.Departments, htmlAttributes: new { @class = "control-label col-md-2" })
    <div&nbsp;class="col-md-10">
        @Html.CheckBoxListFor(model => model.Departments, Model.AllDepartmemtns)
        @Html.ValidationMessageFor(model => model.Departments, "", new { @class = "text-danger" })
    </div>
</div>

<div&nbsp;class="form-group">
    @Html.LabelFor(model => model.Gender, htmlAttributes: new { @class = "control-label col-md-2" })
    <div&nbsp;class="col-md-10">
        @Html.RadioButtonListFor(model => model.Gender, Model.GenderCollection,"myCustomStyle")
        @Html.ValidationMessageFor(model => model.Departments, "", new { @class = "text-danger" })
    </div>
</div>

.

結束語

怎麼樣?這個GUI工具是不是提供了很多的便捷?(怎麼樣?這個廣告硬的可以把?),如果您喜歡這篇文章,記得在右下角給個“推薦”哦,如果您對上文中的廣告的使用效果有什麼意見和建議,請不吝拍磚,謝謝

The end