使用 NuGet 管理我们的程序集 - 预发行版
1、緣起
在我們的項目中。須要引用的組件統一放在一個 Libs 文件夾下。不管對于平臺上的公共組件。還是應用模塊,都是如此。
假設一個應用模塊,比如能源管理(EM)。要引用平臺提供的公共組件,比如數據庫訪問(Platform.PL)。那么不但要把Platform.PL程序集復制到EM的Libs文件夾下,也要把Platform.PL所引用的程序集。也就是Platform.PL的Libs文件夾下的文件。復制到EM的Libs文件夾下。
隨著平臺上應用模塊的增多,Platform.PL被引用得也越來越多。我們是怎么把Platform.PL自身及其Libs下的程序集給到這些應用模塊的呢?是通過手工拷貝的方式。
那么問題來了——Platform.PL升級了怎么辦?答案是,僅僅能一一手工拷貝了。
這樣的做法非常老土,并且由于手工拷貝,easy出錯。最好是把共用組件放到server上,應用模塊引用或升級時就去server上下載或更新。實際上,業界已經這么做非常久了。就是用 NuGet 獲取程序集。
僅僅是這些程序集普通情況下都是公開的,比如 NHibernate、Spring.Net等等。我們能夠使用 NuGet 的機制,并且把共用的程序集放到內部的server上。
因此,這里介紹的,不是怎么用 NuGet 來管理一個解決方式所使用的程序集,而是怎么把我們自己開發的公共組件放到內部的server上,讓其它模塊下載、更新。
順帶說一下開發環境,當然是 .NET 了,Visual Studio的版本號是 2012。這個版本號已經缺省安裝了 NuGet 包管理器。
2、準備待公布的程序集
開發好公共組件后。要將其公布到 NuGet server上,須要做些準備工作。
0. 下載 NuGet.exe。地址在這里。這是一個控制臺程序,以后要在命令行以下執行。下載后。將其放到一個合適的位置,并用path指向這個位置。當然,這個文件僅僅須要下載一次。
1. 創建清單文件。
打開命令行程序。進入公共組件所在項目的目錄,執行 nuget spec。
就像以下這樣:
這樣就會創建一個文件:Platform.PL.nuspec。打開這個文件,會看到是這個樣子的:
<?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl> <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl> <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2014</copyright> <tags>Tag1 Tag2</tags> </metadata> </package>
當中有些內容是不須要的,能夠刪除它。licenseUrl。projectUrl,iconUrl,都能夠刪掉,反正它提示我們刪掉。
releaseNotes和tags一定要改動。否則下一步會出現警告。
比如,我把這個文件改動成這樣:
<?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <releaseNotes>MES平臺數據庫訪問組件首次公布到NuGetserver上</releaseNotes> <copyright>Copyright 2014</copyright> <tags>MES平臺 數據庫訪問</tags> </metadata> </package>
2.打包。在上面的命令行界面下,執行 nuget pack,像以下這樣:
這樣就會創建一個文件 Platform.PL.xyz.nupkg。這就是我們將要公布到NuGetserver上的包。
有一種情況值得一提:由于某種原因,我們不得不使用spring.net的預發行版(pre-release)。好奇么?這個原因就是,spring.net在并發環節使用了Dictionary,而這個類不是線程安全的,導致在執行時出現故障。spring.net在預發行版 2.0.0-RC1攻克了這一問題,但還沒有出穩定(Stable)版。所以我們就使用這個預發行版了。
nuget有一項規定:假設使用了非穩定版的程序集,所公布的程序集就不能是穩定版本號。否則,打包是就會出現這種錯誤:
為此。須要將我們要公布的包設置為測試版或預發行版。做法是手工編輯所在項目的 Properties/AssemblyInfo.cs 文件:
當中的36行就是我們加進去的。
3、將程序集公布到內部server上
經過上一步。我們生成了要公布的包:Platform.PL.3.1.0-alpha.nupkg。
這個包能夠公布到公共的NuGetserver上,供全部人下載。但如今我們不想這么做。我們僅僅是公布到內部server上,僅供項目組內部使用。
要做到這一點,我們首先要創建一個站點。用常規的方法創建IIS站點,能夠給這個站點起名為 NuGetServer。
其次,我們要創建一個Web應用。
利用VS,創建一個 ASP.NET空Web應用程序。
能夠給這個項目起名為 NuGetServer。
再次,在這個應用程序中,用 NuGet 加入 NuGet.Server 包引用:
引用了NuGet.Server包以后。會自己主動增加非常多它引用的包。
再再次,將我們剛創建的 Platform.PL.3.1.0-alpha.nupck 文件,增加到這個Web項目的packages目錄中:
最后,將這個應用公布到站點 NuGetServer 中就能夠了。
公布成功后,打開這個站點,能夠看到類似這種內容:
4、引用程序集
將程序集在內部NuGetserver上公布成功后,就能夠將其引用到應用模塊中了。
在應用模塊引用之前,還須要做一件準備工作:將server加入到NuGet配置中。
在VS 2012中,點擊菜單 工具 --> NuGet程序包管理器 --> 管理解決方式的NuGet程序包,在彈出的對話框中,點擊左下角的“設置”button,會彈出“選項”對話框。點擊右上角的大加號,能夠加入“可用程序包源”,將上面ie提示的地址。如http://localhost:8010/nuget。加入上去就能夠了。能夠起名字為mes:
至此,就能夠像從公共NuGetserver上下載程序集一樣。從內部的NuGetserver上下載我們自己的程序集了。
5、其他
這個帖子的標題帶有“預發行版”。表示這個做法剛實驗通過。真正用起來。應該會面臨諸多意想不到的問題。即便如此,也推薦使用。
建議我們的項目組:
1、擯棄用Libs管理所引用的程序集。轉用 NuGet 下載程序集的方式;
2、MES平臺搭建統一的 NuGet server;
3、公共組件統一公布到 NuGet server上,并參考語義化版本號的方式設置版本號號。
轉載于:https://www.cnblogs.com/bhlsheji/p/5397675.html
總結
以上是生活随笔為你收集整理的使用 NuGet 管理我们的程序集 - 预发行版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据表字段内容的批量修改、复制
- 下一篇: ReactiveCocoa的使用方法