DotNetCore跨平臺~linux上還原自主nuget包需要注意的問題
問題的產生的背景
由於我們使用了jenkins進行部署(jenkins~叢集分發功能和職責處理),而對於.net core專案來說又是跨平臺的,所以對它的專案拉取,包的還原,專案的編譯和專案的釋出都是在一臺linux的jenkins節點上進行的,而我們開發時是在windows系統,所以在進行還原和編譯時出現了一些問題,今天的文章主要是解決這些問題的。
.net frameworks時代
我們在.net時代有包管理工具nuget,並且已經知道了它的好處,類似於nodejs的npm,幫助我們管理專案的依賴關係,升級和解除安裝都十分方便,它在.net專案裡被儲存到了解決方案下的packages目錄,而在釋出時,msbuild會根據這個目錄去升級專案,如果這個packages裡沒有物件的包包依賴,就會從nuget源裡進行下載,nuget全域性源在windows系統裡,一般儲存在C:\\Users\\lind\\AppData\\Roaming\\NuGet\\NuGet.Config檔案裡,而本地系統也會有一個包包的快取,一般會儲存在C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\目錄下面,這樣在下次安裝包的時候,就可以直接從本地進行安裝了,官方nuget源的地址是https://api.nuget.org/v3/index.json,如果你自己去定義nuget伺服器的話,也可以把它新增到nuget源裡,直接修改C:\Users\lind\AppData\Roaming\NuGet\Nuget.Config檔案就可以了,或者在vs的工具-選項裡去新增它。
.net core時代
在進行跨平臺的core時代後,我們的packages資料夾沒有了,之前的包都被儲存到了obj目錄下面,而包的對映關係在obj\project.assets.json這個檔案裡,我們可以看到當前專案引用的包包,包包的源,包包的快取等資訊。
注意: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資料夾的執行許可權
- 最後才是成功釋出
生成過程中的一些錯誤截圖
自主依賴包找不到
沒有對Roslyn的執行許可權
最後,等待我們的才是成功!
成功得來不容!
希望通過我們的分享,可以幫到正遇到問題的您!
感謝各位閱讀!