如何迁移#SNMP到.NET Core平台的一些体会
.NET Core 依然在飛速進(jìn)化中,所以如果不是非常喜歡折騰的性格,建議各位還是暫時(shí)忍耐。
準(zhǔn)備階段
首先,Visual Studio 2015是必要的開發(fā)工具。雖然它已經(jīng)包含了.NET Core的原始測(cè)試版,這里還是推薦下載 RC1 安裝包,
http://get.asp.net
請(qǐng)下載 ASP.NET 5 RC 那個(gè)版本。下面都是假設(shè)在 Windows 系統(tǒng)上。
執(zhí)行安裝程序,它會(huì)進(jìn)一步下載更多的部件。等到安裝完成,就可以進(jìn)行 .NET Core RC1程序的開發(fā)。
下面讓我們進(jìn)一步升級(jí)到 RC1 Update 1這個(gè)升級(jí)版本:
打開 Visual Studio Command Prompt。
執(zhí)行”dnvm upgrade”命令。
再執(zhí)行”dnvm list”命令。
如果一切正常,那么這時(shí)候輸出應(yīng)該是這樣的,
C:\Program Files (x86)\Microsoft Visual Studio 14.0>dnvm list
Active Version?????????? Runtime Architecture Location???????????????????? Alias
—— ——-?????????? ——- ———— ——–???????????????????? —–
?????? 1.0.0-rc1-final?? clr???? x86????????? C:\Users\lextm\.dnx\runtimes
?????? 1.0.0-rc1-update1 clr???? x64????????? C:\Users\lextm\.dnx\runtimes
? *??? 1.0.0-rc1-update1 clr???? x86????????? C:\Users\lextm\.dnx\runtimes default
?????? 1.0.0-rc1-update1 coreclr x64????????? C:\Users\lextm\.dnx\runtimes
?????? 1.0.0-rc1-update1 coreclr x86????????? C:\Users\lextm\.dnx\runtimes
開始遷移
下面可以開啟 Visual Studio 2015,并且創(chuàng)建一個(gè)類型是 Class Library (Package) 的新工程(Visual Studio 2015 Update 1似乎把這個(gè)工程類型改名了,研究中)。這種工程的文件后綴是.xproj。這種工程的編譯結(jié)果會(huì)是一個(gè) NuGet 包。
在往里面加入新東西之前,我們先來(lái)研究一下 project.json 文件。
需要注意的是 project.json 是全新的管理依賴項(xiàng)的方式,它既代替了原來(lái)管理 NuGet 包的 packages.config,也替代了原來(lái) .csproj 工程文件中管理引用的部分。
一個(gè)范例是 #SNMP Library 現(xiàn)在使用的 project.json 文件,
https://github.com/lextm/sharpsnmplib/blob/netcore5/SharpSnmpLib/project.json
從中我們可以看到,既有用來(lái)描述 NuGet 包的各種元數(shù)據(jù)信息,也包含依賴項(xiàng)。
其中比較主要的部分是它指明了兩個(gè)平臺(tái)別名(moniker),一個(gè)是 .NET Framework 4.5.1(net451),另一個(gè)是 .NET Platform Standard 5.4(dotnet5.4)。
前者有一個(gè)基本的引用列表,所以不太需要指明具體庫(kù)的應(yīng)用,但是比較特殊的是 System.Runtime.Serialization,所以它是唯一需要寫明的一個(gè)引用。
而后者怎是一個(gè)新的別名,用來(lái)標(biāo)識(shí)一個(gè)包含完整 API 清單的 .NET 平臺(tái)。凡是支持這個(gè)平臺(tái)標(biāo)準(zhǔn)5.4版本的 CLR 實(shí)現(xiàn)(不限 .NET Framework,Mono 或者 Xamarin),都可以使用我們編譯之后的 NuGet 包。關(guān)于平臺(tái)標(biāo)準(zhǔn)的細(xì)節(jié)可以閱讀下面的文檔,
https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
不過(guò)它已經(jīng)更新 RC2 的版本,所以版本號(hào)已經(jīng)改為從1.0計(jì)算了。
面向平臺(tái)標(biāo)準(zhǔn)開發(fā)的一大困擾就是所有的引用都需要手工指明。而這些引用也最后來(lái)自于對(duì)應(yīng)的 NuGet 包。那么怎么尋找這些包和它們的對(duì)應(yīng)版本呢?
簡(jiǎn)單來(lái)說(shuō),步驟就是將要遷移的項(xiàng)目代碼手工拷貝到新工程里,然后編譯。凡是找不到的類型,我們使用微軟臨時(shí)發(fā)布的一個(gè)查詢網(wǎng)站
http://packagesearch.azurewebsites.net
來(lái)查詢包含它的 NuGet 包和版本。這是一個(gè)有點(diǎn)費(fèi)時(shí)間的過(guò)程,因?yàn)?/p>
有些類型是 RC1不存在的,而且可能也不會(huì)出現(xiàn)在 RC2等后續(xù)版本。于是需要換變通的方式。
有些類型在后續(xù)版本中會(huì)有,那么需要等待。
有些類型僅僅出現(xiàn)在桌面版本的 .NET Framework 中于是需要條件編譯。
因?yàn)閮H僅作為一個(gè)測(cè)試,所以我在遷移 #SNMP Library 過(guò)程中就刪去了很多代碼。另外由于 Socket 類型的同步方法都被移除,我也不得不將很多 #SNMP Library 的代碼改寫為 async/await 方式。等微軟正式發(fā)布 RC2,我會(huì)考慮再遷移一部分代碼過(guò)去。
到此,只要編譯通過(guò),那么初步的遷移工作也就結(jié)束了。
寫在最后
還有其他值得注意之處:
和 project.json 對(duì)應(yīng),Visual Studio 會(huì)維護(hù)一個(gè) project.lock.json 文件。這個(gè)文件詳細(xì)記錄了依賴項(xiàng)展開的情況,了解它的結(jié)構(gòu)有利于調(diào)試一些依賴項(xiàng)問(wèn)題。但是不要將它簽入到版本控制。
.xproj 工程不像 .csproj 那樣需要明確指示工程包含的源文件,而是默認(rèn)將同一文件夾下面所有源文件引入。因此有可能遷移過(guò)程中需要調(diào)整下工程文件的組織。
暫時(shí)沒(méi)有特別方便的單元測(cè)試集成。后面應(yīng)該會(huì)有。
dotnet5.x 是個(gè)臨時(shí)的別名,后面都會(huì)改成 netstandard1.x。
上面僅僅談到了遷移過(guò)程中最為重要的步驟。一些工具,如 dnvm 由于 RC2 起會(huì)被 dotnet 工具取代,所以都沒(méi)有詳細(xì)介紹。現(xiàn)在這個(gè)階段,還是淺嘗輒止比較經(jīng)濟(jì)實(shí)惠。
敬請(qǐng)關(guān)注后續(xù)文章。
相關(guān)文章
ASP.NET Core 1.0 入門——Application Startup
ASP.NET Core 1.0 入門——了解一個(gè)空項(xiàng)目
ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
.NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0簡(jiǎn)介
云服務(wù)器下ASP.NET Core 1.0環(huán)境搭建(包含mono與coreclr)
使用VS Code開發(fā)ASP.NET Core 應(yīng)用程序
dotnet run是如何啟動(dòng)asp.net core站點(diǎn)的
ASP.NET Core提供模塊化Middleware組件
“dotnet restore"和"dotnet run"都做了些什么?
探秘 dotnet run 如何運(yùn)行 .NET Core 應(yīng)用程序
.NET Portability Analyzer 已開源
.NET跨平臺(tái)之旅:corehost 是如何加載 coreclr 的
ASP.NET Core 行軍記 -----拔營(yíng)啟程
原文地址:https://blog.lextudio.com/2016/03/how-to-port-snmp-library-to-net-core-zh/
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
贊賞
人贊賞
總結(jié)
以上是生活随笔為你收集整理的如何迁移#SNMP到.NET Core平台的一些体会的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 利用F#库canopy进行UI测试
- 下一篇: asp.net ajax控件工具集 Au