1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)
今天早上看到新聞,Microsoft都快要推出.NET5了,.NET core也3.0了,而我一直以來的項目都是.net 4.5+,包括WWF,WCF等技術(shù)框架,目前主流的基礎(chǔ)框架都基本要求支持跨平臺,容器化,所以.NET Core將是趨勢,網(wǎng)上簡單的查了下相關(guān)資料,.net core明確不支持wwf,wcf,因此遷移道路注定充滿各種坑,接下來一一記錄,以備翻查。
1.開發(fā)環(huán)境的選擇:
Visual Studio2017雖然功能強大,IDE各種圖形化編輯,傻瓜式一鍵生成,但非常重,幾個G,下裝安裝兩小時以上。為了命令行運指如飛(裝逼)的需要,選擇一個輕量級的IDE是首要工作,同樣作為微軟出品,必屬精品(作為一個微軟系技術(shù)跟隨者,此處拍下馬屁)的Visual Studio Code,口碑爆棚,由Eric Gamma領(lǐng)導(dǎo)開發(fā),說起這個大神,如果你不知道他的名字,那你絕對IT還沒入門,作為GoF(Gang of Four四人幫)合著的設(shè)計模式是每個資深I(lǐng)T人必看的書籍(PS,其它大神如Anders hejlsberg/JeffreyRichter/Matin Fowler,如果你沒看過他們的書,那都不好意思說混IT的,為大神打call)。不論是開發(fā)NODE.JS、前端Web、.NET Core,VS Code都能輕松搞定。
下載安裝后:
和VS2017的差異如紅色標注:
最上面紅色框是打開項目,不再是打開.csproj或.sln,而是直接打開文件夾,第二個標注的蟲子圖標是調(diào)試設(shè)置,后面再詳細說說怎么用,第三個紅色標注是插件安裝(這也是VSCODE強大之處)。
2.安裝.NET Core SDK
VS Code->Terminal->new Terminal(打開一個新的終端,相當(dāng)于命令行窗口),
輸入dotnet -version,(默認輸出是沒有顯示紅色標識文字的,我本機已經(jīng)裝了2.2.105版本的sdk)
因為沒有安裝sdk,所以不能執(zhí)行創(chuàng)建MVC項目的命令,接下來去官網(wǎng)下載.net core sdk,
https://dotnet.microsoft.com/download/dotnet-core(目前最新版3.0)注意要下載sdk,而不是runtime的,runtime顧名思義是用于運行時支持。我的電腦是windows 64位的,所以我選擇紅色標識的,你可以根據(jù)電腦操作系統(tǒng)選擇對應(yīng)版本安裝下載(MAC OS上也支持得很好哦,其實我更喜歡在蘋果電腦上開發(fā),速度快,linux命令行天然支持,而且后面Docker of Mac也很容易跑起來)。
?
3.創(chuàng)建ASP.net core MVC 項目
?一直以來,java、php、.net各自陣容開發(fā)人員互懟,其中.net最被人詬病的就是命令行支持,但其實一直以來我們是在IDE的便利下,系統(tǒng)幫我們做了大部份的命令行工作。幸運的是,是重拾命令行(開啟裝逼)模式的時候了:
vs code終端下鍵入:dotnet new mvc -n HelloWorld
File->Open Folder,打開創(chuàng)建的目錄,我是在d:\下執(zhí)行的創(chuàng)建項目命令,所以打開d:\HelloWorld目錄:
可以看到自動為我們創(chuàng)建了對應(yīng)的目錄和文件,相比.net 4.6項目結(jié)構(gòu),有較大差別,我們先從表面上看,有以下變化:
- Program.cs,這是console或windows form程序入口呀,怎么Web網(wǎng)站也有這個文件了呢,其實看代碼就明白了,是在入口處創(chuàng)建了web服務(wù)并開啟監(jiān)聽http請求。
?
public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();}- appsettings.json,傳統(tǒng)的web.config變成了這個,讀取方式也變了,原來System.Configuration變成了Microsoft.Extensions.Configuration
- ? ?Content目錄和Scripts目錄變成了wwwroot,靜態(tài)資源全放到這個里面了。
- ? ?代碼大量用了DI的技術(shù),這也不是啥新概念,老鳥一般都知道。
4.增加控制器和視圖
用VS2017增加控制器和視圖是非常簡單的,直接項目上右鍵彈出菜單就可以增加,但vs code里必須命令行增加:
dotnet aspnet-codegenerator controller -name MyController -actions -outDir Controllers
百度一下,是要增加一個引用,直接選擇Helloworld.csproj(項目文件在vs code里作為一個文件編輯),?在項目文件csproj中添加“?<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />”引用,保存后再在終端里運行dotnet restore命令:
可以看到自動為項目增加了幾個關(guān)聯(lián)的庫。dotnet restore這個命令比較重要,它的作用就是將項目中引用的庫自動從nuget中下載(補充一點:在用vs2017打開項目時,會自動執(zhí)行這個動作,并將下載的組件下載到packages目錄下,在使用svn或其它源碼管理工具時,這個目錄和bin、obj目錄一樣,是不需加入到源碼控制的,不然因為只讀鎖定會在加入nuget 包時出現(xiàn)訪問拒絕,許多新人不了解這個原理)
錯誤說得很清楚了,csproj里要再加上一個包引用:
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" /> 再次執(zhí)行增加控制器的命令行,又出現(xiàn)新的錯誤了。 D:\HelloWorld\HelloWorld.csproj : warning NU1604: 項目依賴項 Microsoft.VisualStudio.Web.CodeGeneration.Design 不具有包含下限。在依賴項版本 中包含下限可確保一致的還原結(jié)果。 D:\HelloWorld\HelloWorld.csproj : warning NU1701: 已使用“.NETFramework,Version=v4.6.1”而不是項目目標框架“.NETCoreApp,Version=v2.2”還原包“Microsoft.Composition 1.0.27”。此包可能與項目不完全兼容。 D:\HelloWorld\HelloWorld.csproj : error NU1107: Microsoft.CodeAnalysis.CSharp 中檢測到版本沖突。直接安裝/引用 Microsoft.CodeAnalysis.CSharp 2.8.0 到項目 HelloWorld 可解決此問題。 D:\HelloWorld\HelloWorld.csproj : error NU1107: HelloWorld -> Microsoft.AspNetCore.App 2.2.0 -> Microsoft.CodeAnalysis.Razor 2.2.0 -> Microsoft.CodeAnalysis.CSharp (>= 2.8.0) D:\HelloWorld\HelloWorld.csproj : error NU1107: HelloWorld -> Microsoft.VisualStudio.Web.CodeGeneration.Design 1.0.0 -> Microsoft.VisualStudio.Web.CodeGeneration.Utils 1.0.0 -> Microsoft.CodeAnalysis.CSharp.Workspaces 1.3.0 -> Microsoft.CodeAnalysis.CSharp (= 1.3.0).正在生成 MSBuild 文件 D:\HelloWorld\obj\HelloWorld.csproj.nuget.g.props。D:\HelloWorld\HelloWorld.csproj 的還原在 18.14 sec 內(nèi)失敗。 想了想可能是版本不對,那剛加的這個包引用用啥呢,看提示上Microsoft.VisualStudio.Web.CodeGeneration.Design 1.0.0 是因為沒有指定版本而默認用了1.0.0的版本,改成2.0.4版本(和codeGenerator.tools一致)試試, <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" /> 錯誤 依舊,依據(jù)提示是版本不對,改成和.AspNetCore.App的一致版本2.2.0之后,再dotnet restore,系統(tǒng)提示還原成功。 再次執(zhí)行增加控制器的命令:dotnet aspnet-codegenerator controller -name MyController -actions -outDir Controllers增加視圖:dotnet aspnet-codegenerator view Create Create -m ErrorViewModel? -outDir views/My
創(chuàng)建視圖時,必須選擇一個模型,這里我使用默認框架里的ErrorViewModel,另外上面命令行中有兩個Create,第一個是視圖名稱,可以自已命名其它name,第二個為視圖模板類型,可以為Empty/Create/Edit/Delete/Details/List六種類型之一。
接下來,我們運行程序,也是命令行dotnet run,編繹器自動找到.csproj項目編繹運行,也可手動指定項目或解決方案。
瀏覽器地址欄輸入localhost:5000/my/create,剛加入的模板頁面如下:
至此,第一個aspnet.core網(wǎng)站成功啟動,曲折的邁出了第一步。前路更精彩!
轉(zhuǎn)載于:https://www.cnblogs.com/coolalam/p/10824557.html
總結(jié)
以上是生活随笔為你收集整理的1.NET 4.6.1向.NET core 2.0项目迁移(HelloWorld篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git远程推送和抓取分支
- 下一篇: asp.net ajax控件工具集 Au