.Net Core 本地搭建 Nuget 服務(wù)器并打包推送

1. 背景
  • 網(wǎng)上大部分是自己搭建的,這里我在github 上直接拿別人的項目 https://github.com/loic-sharma/BaGet/releases

  • 下載包


    BaGet.png
  • 解壓到本地或者服務(wù)器上并修改 appsettings.json 文件


    Nuget.png
  "ApiKey": "69279c9e-c6f4-48ee-8d9d-72d38dab4b95",
  "PackageDeletionBehavior": "harddelete",
  "Urls":"http://*:9020",
  "AllowPackageOverwrites": true,

  • 完整的
{
  "ApiKey": "69279c9e-c6f4-48ee-8d9d-72d38dab4b95",
  "PackageDeletionBehavior": "harddelete",
  "Urls":"http://*:9020",
  "AllowPackageOverwrites": true,

  "Database": {
    "Type": "Sqlite",
    "ConnectionString": "Data Source=baget.db"
  },

  "Storage": {
    "Type": "FileSystem",
    "Path": ""
  },

  "Search": {
    "Type": "Database"
  },

  "Mirror": {
    "Enabled": false,
    // Uncomment this to use the NuGet v2 protocol
    //"Legacy": true,
    "PackageSource": "https://api.nuget.org/v3/index.json"
  },

  // Uncomment this to configure BaGet to listen to port 8080.
  // See: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#listenoptionsusehttps
  //"Kestrel": {
  //  "Endpoints": {
  //    "Http": {
  //      "Url": "http://localhost:8080"
  //    }
  //  }
  //},

  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Microsoft.Hosting.Lifetime": "Information",
        "Default": "Warning"
      }
    }
  }
}

修改配置.png
  • 上圖中是比較重要的幾個參數(shù),

  • “ApiKey”是密鑰,每次推送或者刪除Nuget包時都需要輸入這個代碼;

  • “Urls”是路由地址和端口號,原來是5000,需要改為8020;

  • “PackageDeletionBehavior"是刪除方式,默認(rèn)“Unlist”,刪除時不會將源文件刪除,只是在前端顯示時看不到了,這會導(dǎo)致再次*
    推送同一個包時報錯,所以這改為"harddelete”,將原來的包徹底刪除。

  • "AllowPackageOverwrites"是是否允許覆蓋,默認(rèn)“false”,不允許覆蓋,改為true之后推送新的包會將原來的包覆蓋掉。

3. 開啟nuget服務(wù)(用IIS部署和正常項目一樣)
  • cmd 到目錄 ,執(zhí)行 dotnet BaGet.dll
4. 訪問地址
訪問.png
5 項目dll 打包
打包.png

結(jié)果.png
生成文件.png
6. 推送
  • dotnet nuget push -k <密鑰> -s http://192.168.1.:9/v3/index.json <包名>.nupkg
E:\項目\2022年項目\****\SdNurseryMall\src\com.uplus.tree\bin\Debug>dotnet nuget push  -k  69279c9e-c6f4-48ee-8d9d-72d38dab4b95 -s http://192.168.1.***:9***/v3/index.json com.uplus.tree.1.0.0.nupkg
正在將 com.uplus.tree.1.0.0.nupkg 推送到 'http://192.168.1.**:90**/api/v2/package'...
  PUT http://192.168.1.**:90**/api/v2/package/
  Created http://192.168.1.**:90**/api/v2/package/ 1245 毫秒
已推送包。

7. 結(jié)果
網(wǎng)頁.png
8 . VS2019 中配置
  • 在VS軟件中,選擇“工具-Nuget包管理器-程序包管理器設(shè)置”,選擇程序包源,


    vs_nuget設(shè)置.png

    nuget_org.png
更換源.png
  • 第一個nuget.org就是默認(rèn)我們通過網(wǎng)絡(luò)獲取程序包的地址,第二個是我新添加的本地的nuget包地址,方法是點擊 “+”,新增源。在名稱中輸入我們?yōu)檫@個源起的名字,源中輸入路由地址,這個地址可以在服務(wù)的網(wǎng)頁上看到,如果是添加服務(wù)器源的話,就將IP改為對應(yīng)的地址就好。


    更換網(wǎng)址.png
9. VS 中查看
錯誤.png

錯誤原因.png
最終結(jié)果.png
9. 補充
  • 刪除包:命令行輸入dotnet nuget delete -s http://localhost:8020/v3/index.json xxx 1.0.0,就可以把服務(wù)器上的包刪除掉,注意這里只寫“包名 版本號”就行,“.nupkg”的后綴也不用加。

  • 需要注意這里的命令是在配置文件中沒有設(shè)置密鑰的情況下,如果設(shè)置了就需要在命令行中加入密鑰才可以執(zhí)行操作。
    設(shè)置包的信息:在項目右鍵屬性,選擇打包,在里面可以設(shè)置版本號,作者等信息。

  • 下載自己推送的包
    包已經(jīng)被推送到服務(wù)器上了,下面就是當(dāng)我們需要的時候下載它。

  • 在“工具-Nuget包管理器-管理解決方案的Nuget程序包”中最右邊“程序包源”選擇我們自己創(chuàng)建的"UplusNuget",就可以在左邊看到我們已經(jīng)推送的包,點擊包在右側(cè)會出現(xiàn)包的信息,選擇版本,進行下載。

  • 關(guān)于包的依賴關(guān)系,如果A包依賴B包,我們將兩個包都已經(jīng)推送到服務(wù)器,那么在我們下載A包時,會自動也下載B包。如果服務(wù)器上只有A包,那么在下載時就會報錯,找不到B包。

  • 關(guān)于包的加密,為了保障包的安全,防止下載 后對包進行反編譯,需要進行一些保護,但目前還沒有找到比較好的方式,待添加。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容