1. 程式人生 > >DotNetCore跨平臺~linux上還原自主nuget包需要注意的問題

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在各大系統中源地址的路徑

  1. Windows 中路徑是 %appdata%\NuGet\NuGet.Config ,
  2. Mac 與 Linux 中的路徑是 ~/.nuget/NuGet/NuGet.Config
  3. 如果沒有 NuGet.Config 檔案,可以執行 dotnet restore 命令生成。

還原自主Nuget包需要注意的問題

  1. 你的nuget自主伺服器需要被當前linux伺服器訪問到
  2. 需要在linux裡建立一個全域性的nuget.config檔案,把自主源地址新增
  3. 把obj目錄新增到原始碼管理裡
  4. dotnet restore還源專案,依賴包由obj\project.assets.json檔案確定
  5. dotnet build編譯專案裡,需要有Roslyn資料夾的執行許可權
  6. 最後才是成功釋出

生成過程中的一些錯誤截圖

自主依賴包找不到

沒有對Roslyn的執行許可權

最後,等待我們的才是成功!

成功得來不容!

希望通過我們的分享,可以幫到正遇到問題的您!

感謝各位閱讀!

 回到目錄