本文主要介紹怎樣通過Visual Studio Code為.Net Core 2.0的項目添加本地類庫引用 ...
廢話後面再說,先將操作步驟貼出來。如果只想查看怎樣添加本地包的引用,可以直接跳到第六步。
第一步,打開VS Code,使用快捷鍵“Ctrl + `”打開終端,或者在菜單欄的“查看”菜單中找到“集成終端”並點擊。在打開的終端視窗中輸入一下命令定位到保存程式的目錄,並新建文件夾“LocalNupkgRefExample”,文件夾名稱自己定義。如下圖所示。
命令說明:
cd 參數:DOS命令,定位到參數中指定的文件夾
mkdir 參數:DOS命令,在當前目錄創建文件夾,名稱由參數指定。如果參數中指定了路徑,那麼會在指定的位置創建文件夾,例如 mkdir ../Test,會在上一級目錄創建Test文文件夾。
為了方便管理文件,我們可以在VS Code中打開剛纔創建的文件夾(“文件”菜單下的“打開文件夾”項),然後通過VS Code的資源管理器管理裡面的文件,這裡不再多說,這些操作自己可以向玩新手機一樣自己嘗試一下。
註意:本示例是用.Net Core 2.0做的,如果你的電腦上沒有安裝,請先下載並安裝。
第二步,使用dotnet new命令添加一個空項目,命名為“LocalNupkgLib”,用來作為被引用的本地包(現在叫做“包”並不合適,因為這隻是編寫時管理程式的項目,還沒有打包)。如下圖所示。運行命令後會在當前目錄“LocalNupkgRefExample”下創建一個文件夾“LocalNupkgLib”,併在裡面創建名稱為LocalNupkgLib的項目文件,以及一個名稱為Class1的類文件。
命令說明:
dotnet new 模板 -n 名稱:在使用.net core命令時需要使用dotnet命令提示符,new命令用於表明添加新文件, 模板用於指出文件類型,-n指示該文件名稱由後面的參數“名稱”指定。截圖中模板為classlib,表示創建類庫。如果不使用-n指定文件名稱,會預設以當前文件夾的名稱為文件名稱。
可以使用 dotnet new或dotnet new -h或者dotnet new --help來查看new命令可以創建哪些文件類型。
第三步,在資源管理器中修改Class1的名稱為MyClassLib(刪除這個類文件再添加新的也可以),修改類名稱為MyClassLib,併在裡面添加一個屬性Message,用於在其他項目中使用。
第四步,將剛纔的項目打包。使用命令pack將項目打包到指定位置。
命令說明:
pack 項目名稱 -o 目標位置:項目名稱就是在之前創建的項目LocaNupkgLib.csproj的名稱LocalNupkgLib,-o後面輸入要將包放在哪個位置,如果不指明位置,預設會打包到要打包的項目的生成文件中,即Debug文件夾裡面。這裡為了便於其他項目引用,將位置放在了與該項目同級的文件夾LocalNupkgRefExample下。
如果打包時項目名稱寫上了擴展名,那麼就需要在運行命令時寫上項目目錄,如下圖所示,當前命令所在的目錄是LocalNupkgRefExample,而項目文件LocakNupkgLib是在子文件夾LocalNupkgLib中,所以直接運行命令dotnet pack LocalNupkgLib.csproj -o ..\mypack就發生報錯,提示找不到項目文件,而寫上子文件夾後就可以正常打包了。
打包後可以在資源管理器中看到剛纔生成的文件夾mypacks,裡面包含一個包文件LocalNupkgLib.1.0.0.nupkg。
個人猜想在不寫項目擴展名時,系統認為項目是在所提供的文件夾LocalNupkgLib中,會在這個文件夾中查找項目文件,名稱不一樣也沒關係(這一點還沒驗證)。
如果需要瞭解詳細的打包命令,可以使用dotnet pack -h來查看。
第五步,添加控制台項目,用於引用剛纔生成的包。
使用命令dotnet new console -n LocalNupkgApp添加一個控制台項目。這一個和添加類庫的命令類似,只是將classlib改為了console。其他不再做說明。
在資源管理器中展開LocalNupkgApp文件夾,可以看到裡面有一個項目文件LocalNupkgApp.csproj。打開Program.cs類文件,我們在裡面調用一下在上一個項目中添加的類庫LocalNupkgLib中的方法。如下圖所示。這裡因為還沒有引用打包好的包文件,所以不會有智能提示。
可以使用命令 dotnet new或者dotnet new -h來查看可以生成哪些類型的文件,命令中需要使用下圖中短名稱列中的內容來表示要生成的文件類型。
生成一下這個控制台項目,看看會發生什麼。
使用命令dotnet build LocalNupkgApp後發生了報錯,如下圖所示:缺少引用。是不是和Visual Studio中發生的問題一樣?接下來就是要解決這個引用的問題了。
第六步,在控制台項目中添加本地引用。
運行命令dotnet add LocalNupkgApp package LocalNupkgLib。運行後發生報錯,提示找不到這個包。註意錯誤提示,是到一個網站上查找的,而不是本地我們指定的那個位置mypacks。
為了讓系統知道從哪裡找我們的包文件,我們需要修改一個控制台項目的項目文件LocalNupkgApp.csproj.
如下圖所示,打開LocalNupkgApp.csproj文件,在PropertyGroup中添加元素<RestoreSources>..\mypacks</RestoreSources>,“..\mypacks”即是我們指定的包位置,因為mypacks文件夾位於控制台項目文件夾的上一級,所以需要使用“..”來確定相對路徑。
如果需要設置多個包的位置,可以在RestoreSources元素中添加多個位置,多個位置之間用分號“;”分隔。例如<RestoreSources>C:\Users\sun\.nuget\packages; ..\mypacks; https://api.nuget.org/v3</RestoreSources>
再次運行包引用命令。可以看到已經沒有報錯,並且顯示添加上了包。這時在查看LocalNupkgApp.csproj文件可以看到裡面已經添加了一個元素<PackageReference>。當然這個元素我們也可以手動添加到項目文件中,而不用命令行。
如果我們要直接引用項目,而不是類庫(包),那麼使用命令dotnet add LocalNupkgApp reference LocalNupkgLib\LocalNupkgLib.csproj。這裡省略項目路徑和擴展名會報錯,提示找不到項目。運行後系統會在項目文件的<ItemGroup>元素中添加一個項目引用:
<ProjectReference Include="..\LocalNupkgLib\LocalNupkgLib.csproj" />
第七步,重新生成項目。已經沒有報錯了。
第八步,運行項目。可以看到已經顯示了我們添加的消息。
運行項目使用run命令,註意要添加-p用來指定項目名稱。
到此,將本地類庫添加到項目中已經結束。
文章中一些命令並沒有做詳細的解釋,因為每一個命令都有多個參數,解釋起來會占用很多時間,希望自己有時間可以把這些命令的使用方法以及技巧總結一下。
命令中有些參數可以直接寫項目名稱,而有些還需要填寫項目的相對路徑,這些區別也需要整理一下,並弄明白為什麼有的可以直接寫項目名稱,而有的則還需要寫路徑。
因為在剛接觸.net core 2.0,對裡面的各種命令還不熟悉,遇到了添加本地類庫的問題,在網上搜了很多文章都不准確,而且很多是針對.net core 1.0的,好不容易搜索到一篇文章有點眉目,加上自己的測試終於弄明白了。這裡忘了文章的地址,剛纔重新搜索了一下,沒找到。。。暫時沒法添加文章地址,對不住文章作者了。
因為本人也是剛接觸.net core 2.0,而且沒什麼寫博客的經驗,內容有些散亂,希望能幫助大家,也希望.net core 2.0越發展越好,不要虎頭蛇尾。