問題的產生的背景 由於我們使用了jenkins進行部署(jenkins~集群分發功能和職責處理),而對於.net core項目來說又是跨平臺的,所以對它的項目拉取,包的還原,項目的編譯和項目的發佈都是在一臺linux的jenkins節點上進行的,而我們開發時是在windows系統,所以在進行還原和編 ...
問題的產生的背景
由於我們使用了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%NuGetNuGet.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的執行許可權
最後,等待我們的才是成功!
成功得來不容!
希望通過我們的分享,可以幫到正遇到問題的您!
感謝各位閱讀!