DotNetCore跨平臺~linux上還原自主nuget包需要注(zhu)意的問題
問題的產生的背景
由于我們使用了jenkins進行部署(jenkins~集群分發功能和職責處理),而(er)對于.net core項(xiang)(xiang)目來(lai)說(shuo)又是跨平臺(tai)的(de)(de),所以對它的(de)(de)項(xiang)(xiang)目拉取(qu),包的(de)(de)還原,項(xiang)(xiang)目的(de)(de)編譯(yi)和項(xiang)(xiang)目的(de)(de)發布都是在(zai)一臺(tai)linux的(de)(de)jenkins節(jie)點上進行(xing)的(de)(de),而(er)我們開發時(shi)是在(zai)windows系統,所以在(zai)進行(xing)還原和編譯(yi)時(shi)出現了一些問題,今天的(de)(de)文章主要(yao)是解決這些問題的(de)(de)。
.net frameworks時代
我們在(zai)(zai).net時(shi)代(dai)有(you)包(bao)管(guan)理工(gong)具(ju)nuget,并且已經知道了(le)它(ta)的(de)好(hao)處,類似于nodejs的(de)npm,幫助我們管(guan)理項目(mu)(mu)的(de)依賴(lai)關系,升級(ji)和卸載都十分(fen)方(fang)便,它(ta)在(zai)(zai).net項目(mu)(mu)里(li)被存儲(chu)到了(le)解決(jue)方(fang)案下(xia)的(de)packages目(mu)(mu)錄,而(er)(er)在(zai)(zai)發布時(shi),msbuild會(hui)(hui)根(gen)據這(zhe)個目(mu)(mu)錄去(qu)(qu)升級(ji)項目(mu)(mu),如果(guo)這(zhe)個packages里(li)沒有(you)對象的(de)包(bao)包(bao)依賴(lai),就會(hui)(hui)從(cong)nuget源(yuan)(yuan)里(li)進(jin)行下(xia)載,nuget全局源(yuan)(yuan)在(zai)(zai)windows系統里(li),一(yi)般存儲(chu)在(zai)(zai)C:\\Users\\lind\\AppData\\Roaming\\NuGet\\NuGet.Config文件里(li),而(er)(er)本地系統也(ye)會(hui)(hui)有(you)一(yi)個包(bao)包(bao)的(de)緩存,一(yi)般會(hui)(hui)存儲(chu)在(zai)(zai)C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\目(mu)(mu)錄下(xia)面,這(zhe)樣在(zai)(zai)下(xia)次(ci)安裝包(bao)的(de)時(shi)候(hou),就可以直接從(cong)本地進(jin)行安裝了(le),官(guan)方(fang)nuget源(yuan)(yuan)的(de)地址是(shi)//api.nuget.org/v3/index.json,如果(guo)你自己(ji)去(qu)(qu)定義nuget服務器的(de)話(hua),也(ye)可以把它(ta)添加到nuget源(yuan)(yuan)里(li),直接修改C:\Users\lind\AppData\Roaming\NuGet\Nuget.Config文件就可以了(le),或(huo)者在(zai)(zai)vs的(de)工(gong)具(ju)-選(xuan)項里(li)去(qu)(qu)添加它(ta)。
.net core時代
在進行跨平(ping)臺的(de)(de)core時代后,我(wo)(wo)們的(de)(de)packages文件(jian)夾沒有了(le),之前(qian)(qian)的(de)(de)包都被存(cun)儲到了(le)obj目錄下面(mian),而包的(de)(de)映射關系在obj\project.assets.json這個文件(jian)里,我(wo)(wo)們可以看到當前(qian)(qian)項目引用的(de)(de)包包,包包的(de)(de)源,包包的(de)(de)緩存(cun)等信息。

注意:nuget在各大系統中源地址的路徑
- Windows 中路徑是 %appdata%\NuGet\NuGet.Config ,
- Mac 與 Linux 中的路徑是 ~/.nuget/NuGet/NuGet.Config
- 如果沒有 NuGet.Config 文件,可以運行 dotnet restore 命令生成。
還原自主Nuget包需要注意的問題
- 你的nuget自主服務器需要被當前linux服務器訪問到
- 需要在linux里建立一個全局的nuget.config文件,把自主源地址添加
- 把obj目錄添加到源代碼管理里
- dotnet restore還源項目,依賴包由obj\project.assets.json文件確定
- dotnet build編譯項目里,需要有Roslyn文(wen)件夾的執行(xing)權限
- 最后才是成功發布
生成過程中的一些錯誤截圖
自主依賴包找不到

沒有對Roslyn的執行權限(xian)

最后,等待我們的才是成(cheng)功!
成功得來不容!
希望(wang)通過我(wo)們的分享(xiang),可以幫到(dao)正遇到(dao)問題的您!
感謝各位閱讀!