文章出處

回到目錄

問題的產生的背景

由于我們使用了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的執行權限

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

成功得來不容!

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

感謝各位閱讀!

 回到目錄


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()