.NET 工具¶
Terminology rule (zh-TW pages)
技術名詞首次出現以「中文 (English original)」格式呈現,例:依賴注入
(dependency injection)。不自創翻譯——若無公認譯名直接保留英文
(如 embedding、tokenizer)。代碼、API 名、CLI flag、套件名、檔名一律不翻。
在 chezmoi init 期間以 installDotnetTools = true 選用。此角色 (role) 會:
- 透過 mise 安裝 .NET SDK(
mise use -g dotnet@latest)—— 與rust_cargo_tools用於 Rust 相同的機制,因此不必再走brew install dotnet/Microsoft apt repo/dotnet-install.sh那套流程。 - 迭代
dotnet_tools清單,對每個項目執行dotnet tool install --global <pkg>。二進位會落到~/.dotnet/tools,當該目錄存在時,會由00_exports.zsh自動加進PATH。
預設附帶的工具:
| 工具 | 二進位 | 說明 |
|---|---|---|
| azure-cost-cli | azure-cost |
針對 Azure 訂閱 (subscription) 做成本分析/異常偵測/預算/CI 成本門檻 |
要新增更多工具,編輯 dot_ansible/roles/dotnet_tools/defaults/main.yml:
dotnet_tools:
- name: azure-cost-cli
binary: azure-cost
- name: dotnet-ef # EF Core CLI
binary: dotnet-ef
- name: PowerShell # 跨平台 PowerShell
binary: pwsh
為什麼用 mise?¶
- 整個 stack 用同一套 SDK 管理器。 在本 repo 中 mise 已經負責 Node.js/Rust/(選擇性的)Python。把
dotnet加進來,所有語言執行期 (runtime) 都集中在~/.local/share/mise/installs/之下。 - 不需 sudo/不需系統套件管理器。
mise use -g dotnet@latest在 macOS、有 sudo 的 Ubuntu、UbuntunoRoot上行為一致。對比之下,先前的設定要看平台來選brew install dotnet、packages-microsoft-prod.deb、或dotnet-install.sh。 - 全域版本鎖定 (pin) 存在
~/.config/mise/config.toml。mise upgrade dotnet可以乾淨地升級,其他 mise 工具仍維持各自鎖定的版本。 - PATH 上有 shim。 一旦 mise 在 zsh 中啟用,
~/.local/share/mise/shims/dotnet會自動解析dotnet。
快速上手¶
# 在 chezmoi init 期間
chezmoi init --force # 重新提示;對 installDotnetTools 答 y
# 或者臨時手動執行
ansible-playbook ~/.ansible/playbooks/macos.yml --tags dotnet_tools
# 驗證
dotnet --version
azure-cost --help
azure-cost-cli 用法¶
azure-cost-cli 包裝 Azure Cost Management API。它會重複利用同一個 az login session,因此只要 Azure CLI(來自 iac_tools 角色)已驗證,它就「直接能用」。
# 累計成本(當前帳單月份、目前訂閱)
azure-cost accumulatedCost
# 指定訂閱、強制以 USD 表示
azure-cost accumulatedCost -s <sub-id> --useUSD
# 成本最高的前 10 筆資源、markdown 輸出(PR 留言/Job Summary 用)
azure-cost costByResource --top 10 -o markdown
# 依服務分組的每日趨勢
azure-cost dailyCosts --dimension MeterCategory
# 對最近 7 天做異常偵測
azure-cost detectAnomalies --recent-activity-days 7
# 依標籤計算成本(給團隊回報 show-back)
azure-cost costByTag --tag cost-center --tag owner
# 預算 + 🟢 OK / 🟡 AT-RISK / 🔴 EXCEEDED 狀態
azure-cost budgets
# CI 成本門檻:總額 > $500 時離開碼 1
azure-cost accumulatedCost -s <sub-id> -o json --fail-if-over 500 > costs.json
驗證 (authentication) 備註:
- 使用
ChainedTokenCredential—— 先抓az login,再走環境變數/managed identity - 帳號需要在目標範圍上有 Cost Management Reader 權限
- 並非所有訂閱類型都會公開 Cost Management API(贊助方案、CSP 等級)。請見上游 README了解 quota-id 相容性檢查。
升級¶
# 升級 .NET SDK(由 mise 管理)
mise upgrade dotnet
# 或鎖定特定 channel
mise use -g dotnet@8
# 升級特定的全域工具
dotnet tool update --global azure-cost-cli
# 列出已安裝的 dotnet 全域工具
dotnet tool list --global
疑難排解¶
安裝後出現 dotnet: command not found¶
dotnet 二進位是透過 mise shim 引入。確認 mise activate 已在你的 shell 中執行:
# 檢查 shim
ls ~/.local/share/mise/shims/dotnet
# 重新啟用 mise(理論上應該已經由 shell config 載入)
eval "$(mise activate zsh)"
azure-cost: command not found¶
dotnet tool install --global 把二進位放在 ~/.dotnet/tools。該目錄只在存在時才會被 ~/.config/zsh/00_exports.zsh 加到 PATH 前面,所以首次安裝後請開新的 shell:
如果用的是 bash,請手動加入:
角色執行時找不到 mise¶
當 mise 未安裝時,角色會拒絕繼續並印出 skip 警告。mise 屬於 bootstrap 階段
(見 run_once_before_00_bootstrap.sh.tmpl),
所以常見原因是 bootstrap 執行不完整。請重新執行:
相關連結¶
- mise dotnet plugin (asdf-dotnet)
- dotnet tool install 文件
- NuGet 上的 dotnet 全域工具搜尋
- docs/tools/infrastructure-as-code.md —— Azure CLI/Terraform/OpenTofu(獨立的
installIacTools選用;這裡的az login是azure-cost的驗證來源)