打造私人的 NuGet 使用 Azure Artifacts
- 2026-03-05
- 15
- 0
開發 .NET 相關應用的對於 NuGet 這個官方的套件管理器一定不陌生,我自己一直以來也有在維護兩個自己在用的類別庫,以往都是直接使用專案參考的方式引用,後來 .NET 版本變化太快就變成用當下的版本編譯後保留 dll 來用,但這種方法很容易造成某個一段時間沒有維護的專案需要重啟的時候發生版本不相容的問題,如果當初的 dll 忘了簽入,或是版本混淆就很麻煩,之前當然也有想過自架 NuGet 或是使用 MyGet 這種服務,但遲遲一直沒有下手,直到前天因為某個舊專案的洗禮,所以開始了我的自架之路。

至於為什麼選 Azure Artifacts 是因為我原本就在使用 Azure DevOps 所以選擇 Azure Artifacts 是適合的,並且 Azure Artifacts 還有免費額度可以使用,對於我個人用是綽綽有餘,以下是 Azure Artifacts 的介紹。
Azure Artifacts 介紹
Azure Artifacts 是一個專為開發團隊設計的套件管理工具,能夠有效地儲存、管理及共用多種套件類型,例如 NuGet、npm、Maven、Python 和 Cargo。它提供了一個集中化的存放庫,讓團隊能夠從單一來源管理所有依賴項,並確保套件的安全性與穩定性。
核心功能
Azure Artifacts 支援從公用與私人來源建立摘要(Feed),並允許團隊成員快取和共用套件。這不僅能避免外部儲存庫變更或移除導致的問題,還能提升 CI/CD 管線的穩定性。摘要可以儲存多種套件類型,並支援上游來源(Upstream Sources),例如 npmjs.com 和 nuget.org,讓團隊能夠快速存取所需的套件。
優勢與注意事項
Azure Artifacts 提供 2GB 的免費儲存空間,適合小型團隊進行評估。然而,對於大型組織或需要儲存大量套件的情境,可能需要升級儲存方案以避免空間不足。此外,Azure Artifacts 內建安全性與合規性,確保套件的存取受到嚴格控制,並支援多種開發工具和框架。
透過 Azure Artifacts,開發團隊能夠更高效地管理套件依賴,減少外部變更帶來的風險,同時提升整體開發與部署流程的穩定性與效率。
設定 Artifacts
進到 Azure DevOps 選擇專案內的 Artifacts

建立 Feed
選擇「+ Create Feed」 直接放上翻譯圖,這樣就不用解釋了😎 因為我是自己要用(公司要用也應該一樣)建議選 Organization 這樣比較方便,然後有勾 Upstream sources 的話他預設會把幾乎所有的公開套件管理器都內建進來。

上傳類別庫至 Artifacts
既然我們都使用了 Azure DevOps 當然是直接接上 CI/CD 最輕鬆,但這部分並不是我們這篇文的重點,所以這裡直接附上片段的 YAML 熟習 Azure DevOps 的應該是可以馬上上手的。
trigger:
branches:
include:
- master
pr:
branches:
include:
- master
variables:
- name: buildConfiguration
value: 'Release'
- name: feedName
value: 'blog-test'
- name: majorVersion
value: '1'
- name: minorVersion
value: '0'
- name: patchVersion
value: $[counter(format('{0}.{1}', variables['majorVersion'], variables['minorVersion']), 1)]
- name: packageVersion
value: '$(majorVersion).$(minorVersion).$(patchVersion)'
stages:
- stage: __default
jobs:
- job: Job
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: '安裝 .NET 10 SDK'
inputs:
packageType: 'sdk'
version: '10.x'
- task: DotNetCoreCLI@2
displayName: '還原 NuGet 套件'
inputs:
command: 'restore'
projects: 'ClassLibrary1.csproj'
- task: DotNetCoreCLI@2
displayName: '建置專案 ($(buildConfiguration))'
inputs:
command: 'build'
projects: 'ClassLibrary1.csproj'
arguments: >-
--configuration $(buildConfiguration) --no-restore /p:Version=$(packageVersion)
- task: DotNetCoreCLI@2
displayName: '產生 NuGet 套件 v$(packageVersion)'
inputs:
command: 'pack'
projects: 'ClassLibrary1.csproj'
configuration: '$(buildConfiguration)'
outputDir: '$(Build.ArtifactStagingDirectory)'
nobuild: true
arguments: '/p:PackageVersion=$(packageVersion)'
- task: PublishBuildArtifacts@1
displayName: '儲存 .nupkg 至 Pipeline Artifacts'
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'nuget-packages'
- task: NuGetAuthenticate@1
displayName: '驗證 Azure Artifacts'
condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'master'))
- task: NuGetCommand@2
displayName: '發佈至 Azure Artifacts Feed'
condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'master'))
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: '$(feedName)'
allowPackageConflicts: true
權限設定
沒意外的話你一定會遇到錯誤,這是因為我們還沒有設定權限
[warning]Could not create provenance session: %s
[warning]User 'b84d762a-xxxx-xxxx-xxxx-650364750fac' lacks permission to complete this action. You need to have 'ReadPackages'.
回到 Artifacts 頁面點選右上角的齒輪圖示(在 Recycle Bin 右邊)選擇「Permissions」 按「Add users/groups」選擇 xxxx Build Service(組織名稱) 的權限調整為「Feed Publisher」調整完畢後再次執行 Pipelines 應該就會過了。
xxxx 就是你專案的名稱,這範例就是 test 組織名稱就是你在 Azure DevOps 的名稱(通常就是網址的前面)
如果你加了以後還是顯示權限不足,那可以利用這個網址
https://vssps.dev.azure.com/demoshop/_apis/identities?identityIds=b84d762a-xxxx-xxxx-xxxx-650364750fac&api-version=7.1
來找到對應的 User ,這會是一份 JSON 你需要看 customDisplayName 這個屬性的值
Pipelines 成功後點選回到 Artifacts 頁面就可以看到類別庫出現了

連接 Feed
點選畫面上方的「Connect to Feed」並且選擇你要用什麼來連,我們的範例是使用 NuGet.exe 點擊後可看到說明需要建立一個 nuget.config 檔案,內容大致如下(別貼我的貼你頁面看到的)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="blog-test" value="https://xxxxxxxx.pkgs.visualstudio.com/_packaging/blog-test/nuget/v3/index.json" />
</packageSources>
</configuration>
但這只是設定給 CLI 用的你要在 Visual Studio 的 NuGet 套件管理器找到自己的類別庫,需要新增套件來源: 
- 可下拉選擇套件來源(我們的 feed 有設定上游套件,所以直接選我們自己的就好)。
- 如果還沒有設定自己的套件來源可以點選這個齒輪進去設定,就是上面那份 XML 的位置。
- 搜尋框就沒什麼好解釋的。








OSCP+ 滲透測試專業實戰培訓課程 [2026-03-28]開課 共78H
留言討論
目前還沒有留言,歡迎留下您的意見。
發表留言