meta_package_manager.managers.dotnet module¶
- class meta_package_manager.managers.dotnet.DotNet[source]¶
Bases:
PackageManager.NET global tools, the CLI programs the .NET SDK installs from NuGet.
Every operation goes through the
dotnet toolsubcommand group, forced byDotNet.pre_args, and targets the user-wide scope with--global. Global tools land under~/.dotnet/toolsand are never shared between users, so no operation escalates: elevation is only ever needed for the separate--tool-pathscenario, which this wrapper does not drive.Documentation: .NET global tools.
Note
The listing and the search results are column tables whose headers are localized resource strings, translated into thirteen languages. Rather than match English literals,
DotNet.extra_envpins the CLI language and both parsers key on the shape of the row: a package ID, two or more spaces, then a version starting with a digit. That skips the header, the dashed rule and any diagnostic prose the SDK prints above the table, such as the broken-tool warning of dotnet/sdk#4111.Note
dotnet tool listalso speaks JSON, through an undocumented--format jsonthat landed in the9.0.100SDK (dotnet/sdk#37394). mpm deliberately parses the table instead: the three columns of the global listing are all whitespace-free, so nothing is gained, while keying on JSON would raise the floor past8.0.4xx, the oldest SDK band still supported.Caution
No
outdatedoperation is declared: the SDK ships no way to compare installed tools against NuGet without mutating them. A spec fordotnet tool list --outdatedwas written by an SDK maintainer in dotnet/sdk#22853, which was then closed as not planned.upgrade --allis unaffected and maps to the nativedotnet tool update --all.Note
No
cleanupeither. The obvious candidate, dotnet nuget locals all –clear, empties the machine-wide NuGet package folder every .NET project restores against, so a tool-scoped cleanup would invalidate unrelated builds. Nothing clears only what the global tools pulled.Initialize
cli_errorslist.- name: str = 'dotnet tool'¶
Return package manager’s common name.
Default value is based on class name.
- homepage_url: str | None = 'https://learn.microsoft.com/dotnet/core/tools/global-tools'¶
Home page of the project, only used in documentation for reference.
- logo: str | None = 'dotnet'¶
Slug of the brand mark standing for this manager in the documentation.
Names an SVG vendored under
docs/assets/managers/, whose provenance and license are recorded indocs/assets/managers/logos.yaml. Inlined at the top of the manager’s page bymeta_package_manager._docs; a manager leaving it unset keeps the page’s default package glyph.Several managers legitimately share one slug, either because they wrap the same upstream (
brewandcask) or because the tool has no mark of its own and its ecosystem’s stands in (aptunder Debian’s swirl,cargounder Rust’s gear). Documentation-only, likehomepage_url: no CLI output reads it.
- platforms: frozenset[Platform] | Group | Platform | Iterable[Platform | Group] = frozenset({Platform(id='almalinux', name='AlmaLinux'), Platform(id='alpine', name='Alpine Linux'), Platform(id='altlinux', name='ALT Linux'), Platform(id='amzn', name='Amazon Linux'), Platform(id='android', name='Android'), Platform(id='arch', name='Arch Linux'), Platform(id='buildroot', name='Buildroot'), Platform(id='cachyos', name='CachyOS'), Platform(id='centos', name='CentOS'), Platform(id='chromeos', name='ChromeOS'), Platform(id='clearlinux', name='Clear Linux OS'), Platform(id='cloudlinux', name='CloudLinux OS'), Platform(id='debian', name='Debian'), Platform(id='endeavouros', name='EndeavourOS'), Platform(id='exherbo', name='Exherbo Linux'), Platform(id='fedora', name='Fedora'), Platform(id='generic_linux', name='Generic Linux'), Platform(id='gentoo', name='Gentoo Linux'), Platform(id='guix', name='Guix System'), Platform(id='ibm_powerkvm', name='IBM PowerKVM'), Platform(id='kali', name='Kali Linux'), Platform(id='kvmibm', name='KVM for IBM z Systems'), Platform(id='linuxmint', name='Linux Mint'), Platform(id='macos', name='macOS'), Platform(id='mageia', name='Mageia'), Platform(id='mandriva', name='Mandriva Linux'), Platform(id='manjaro', name='Manjaro Linux'), Platform(id='nixos', name='NixOS'), Platform(id='nobara', name='Nobara'), Platform(id='opensuse', name='openSUSE'), Platform(id='openwrt', name='OpenWrt'), Platform(id='oracle', name='Oracle Linux'), Platform(id='parallels', name='Parallels'), Platform(id='pidora', name='Pidora'), Platform(id='pikaos', name='PikaOS'), Platform(id='raspbian', name='Raspbian'), Platform(id='rhel', name='RedHat Enterprise Linux'), Platform(id='rocky', name='Rocky Linux'), Platform(id='scientific', name='Scientific Linux'), Platform(id='slackware', name='Slackware'), Platform(id='sles', name='SUSE Linux Enterprise Server'), Platform(id='slitaz', name='SliTaz GNU/Linux'), Platform(id='sourcemage', name='Source Mage GNU/Linux'), Platform(id='tuxedo', name='Tuxedo OS'), Platform(id='ubuntu', name='Ubuntu'), Platform(id='ultramarine', name='Ultramarine'), Platform(id='void', name='Void Linux'), Platform(id='windows', name='Windows'), Platform(id='wsl1', name='Windows Subsystem for Linux v1'), Platform(id='wsl2', name='Windows Subsystem for Linux v2'), Platform(id='xenserver', name='XenServer')})¶
List of platforms supported by the manager.
Allows for a mishmash of platforms and groups of platforms. Will be normalized into a
frozensetofPlatforminstances at instantiation.
- requirement: str | None = '>=8.0.400'¶
--allondotnet tool updatefirst shipped in the8.0.400SDK, the opening release of the8.0.4xxfeature band (dotnet/sdk#38996, merged ontorelease/8.0.4xx). It was never backported to8.0.3xx, so that is the binding floor: every other operation this wrapper drives predates it by years,dotnet tool searchbeing the youngest at5.0.100.
- extra_env: ClassVar = {'DOTNET_CLI_TELEMETRY_OPTOUT': '1', 'DOTNET_CLI_UI_LANGUAGE': 'en-us', 'DOTNET_NOLOGO': '1'}¶
Additional environment variables to add to the current context.
Automatically applied on each
meta_package_manager.execution.CLIExecutor.run_cli()calls.
- pre_args: tuple[str, ...] = ('tool',)¶
Every operation is a
dotnet toolsubcommand, so the group is forced onto each call. The version probe is exempt: it runs withauto_pre_args=False, which is what leaves it as a baredotnet --version.
- version_regexes: tuple[str, ...] = ('^(?P<version>\\d+\\.\\d+\\.\\d+\\S*)',)¶
dotnet --versionprints the SDK version alone, on a single unlabelled line.It is deliberately preferred over
dotnet --infoas the probe: on a machine carrying the .NET runtime but no SDK,--versionfails while--infostill exits0and reports its inventory. Sincedotnet toolneeds the SDK, the failure is the correct availability signal.$ dotnet --version 9.0.306
- property installed: Iterator[Package]¶
Fetch installed packages.
$ dotnet tool list --global Package Id Version Commands -------------------------------------- dotnet-ef 2.1.11 dotnet-ef
- search(query, extended, exact)[source]¶
Fetch matching packages.
dotnet tool searchqueries NuGet’s search endpoint withpackageType=dotnettool, so only .NET tools come back. NuGet offers no flag to restrict or widen that match, so both refinements are left tometa_package_manager.manager.PackageManager.refiltered_search().Only the first two columns are captured:
AuthorsandDownloadshave no package field to land in, andVerifiedis a marker rather than a value.Caution
NuGet matches the query against descriptions and tags as well as package IDs, but the default table prints no description column, so
mpmcannot see why a row matched.--extendedis therefore declared unsupported rather than claimed: refiltering keeps only the ID and name matches, and a package that matched on its description alone is dropped. Widening this means parsingdotnet tool search --detail, whose per-package blocks do carry aDescription:line, at the cost of keying the parser on localized field labels instead of on the row shape.$ dotnet tool search format Package ID Latest Version Authors Downloads Verified --------------------------------------------------------------------------------------------------------------------------------------------------------------- dotnet-format 4.1.131201 Microsoft 496746 bsoa.generator 1.0.0 Microsoft 533
- cli_names: tuple[str, ...] = ('dotnet',)¶
List of CLI names the package manager is known as.
This list of recognized CLI names is ordered by priority. That way we can influence the search of the right binary.
- ..hint::
This was helpful in the case of the Python transition from 2.x to 3.x, where multiple versions of the same executable were named
pythonorpython3.
By default, this property’s value is derived from the manager’s ID (see the
MetaPackageManager.__init__method above).
- id: str = 'dotnet'¶
Package manager’s ID.
Derived by defaults from the lower-cased class name in which underscores
_are replaced by dashes-.This ID must be unique among all package manager definitions and lower-case, as they’re used as feature flags for the mpm CLI.
- install(package_id, version=None)[source]¶
Install one package.
$ dotnet tool install --global dotnetsay
$ dotnet tool install --global dotnetsay --version 2.1.7
- Return type:
- virtual: bool = False¶
Should we expose the package manager to the user?
Virtual package manager are just skeleton classes used to factorize code among managers of the same family.
- upgrade_all_cli()[source]¶
Generates the CLI to upgrade all packages.
$ dotnet tool update --global --all
- upgrade_one_cli(package_id, version=None)[source]¶
Generates the CLI to upgrade one package.
dotnet tool updateis implemented upstream as an uninstall followed by a reinstall, and refuses to move a tool backwards: aversionolder than the installed one needs aremovefirst.$ dotnet tool update --global dotnetsay
$ dotnet tool update --global dotnetsay --version 2.1.7