{"id":13458084,"url":"https://github.com/dotnet-outdated/dotnet-outdated","last_synced_at":"2025-05-13T00:18:22.312Z","repository":{"id":37865424,"uuid":"133814602","full_name":"dotnet-outdated/dotnet-outdated","owner":"dotnet-outdated","description":"A .NET Core global tool to display and update outdated NuGet packages in a project","archived":false,"fork":false,"pushed_at":"2025-03-17T10:10:39.000Z","size":1258,"stargazers_count":1484,"open_issues_count":100,"forks_count":138,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-05-13T00:17:45.242Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dotnet-outdated.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-17T13:05:29.000Z","updated_at":"2025-05-09T03:41:56.000Z","dependencies_parsed_at":"2024-01-02T22:45:28.564Z","dependency_job_id":"ef3d4c65-2f0c-47c5-9d92-3aad940bf3a3","html_url":"https://github.com/dotnet-outdated/dotnet-outdated","commit_stats":{"total_commits":565,"total_committers":39,"mean_commits":"14.487179487179487","dds":0.7097345132743362,"last_synced_commit":"ca8214c710676303f03eee73cce17ea121cf9237"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-outdated%2Fdotnet-outdated","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-outdated%2Fdotnet-outdated/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-outdated%2Fdotnet-outdated/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dotnet-outdated%2Fdotnet-outdated/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dotnet-outdated","download_url":"https://codeload.github.com/dotnet-outdated/dotnet-outdated/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253843225,"owners_count":21972874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T09:00:44.238Z","updated_at":"2025-05-13T00:18:22.271Z","avatar_url":"https://github.com/dotnet-outdated.png","language":"C#","funding_links":[],"categories":["C\\#","others","C# #","Frameworks, Libraries and Tools","Dependencies \u0026 Versioning"],"sub_categories":["Misc"],"readme":"[![Build Status](https://github.com/dotnet-outdated/dotnet-outdated/workflows/Release/badge.svg)](https://github.com/dotnet-outdated/dotnet-outdated/actions?workflow=Release)\n[![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE)\n[![NuGet Version](https://img.shields.io/nuget/v/dotnet-outdated-tool.svg)](https://www.nuget.org/packages/dotnet-outdated-tool/)\n![Nuget](https://img.shields.io/nuget/dt/dotnet-outdated-tool.svg)\n\n# dotnet-outdated\n\nThis is a continuation of the original `dotnet-outdated` tool created by Jerrie Pelser.\n\nIf you already have the original `dotnet-outdated` tool installed you need to\nrun `dotnet tool uninstall --global dotnet-outdated` before installing this\nversion.\n\n## Overview\n\nWhen using an IDE such as Visual Studio, it is easy to find out whether newer versions of the NuGet packages used by your project is available, by using the NuGet Package Manager. However, the .NET Core command-line tools do not provide a built-in way for you to report on outdated NuGet packages.\n\n**dotnet-outdated** is a .NET Core Global tool that allows you to quickly report on any outdated NuGet packages in your .NET Core and .NET Standard projects.\n\n- [dotnet-outdated](#dotnet-outdated)\n  - [Overview](#overview)\n  - [Installation](#installation)\n  - [Usage](#usage)\n  - [Specifying the path](#specifying-the-path)\n  - [Upgrading packages](#upgrading-packages)\n  - [Working with secure feeds](#working-with-secure-feeds)\n    - [Issues on macOS](#issues-on-macos)\n  - [Handling pre-release versions](#handling-pre-release-versions)\n  - [Locking to the current major or minor release](#locking-to-the-current-major-or-minor-release)\n  - [Reporting on transitive dependencies](#reporting-on-transitive-dependencies)\n  - [Failing when updates are available](#failing-when-updates-are-available)\n  - [Auto-references](#auto-references)\n  - [Saving results to a file](#saving-results-to-a-file)\n  - [Including and excluding packages](#including-and-excluding-packages)\n  - [Only listing new version of packages older than a specified the number of days](#only-listing-new-version-of-packages-older-than-a-specified-the-number-of-days)\n  - [FAQ](#faq)\n    - [Why are unrelated changes made to .csproj files when running with `-u`?](#why-are-unrelated-changes-made-to-csproj-files-when-running-with--u)\n    - [Why I am getting an error about required library hostfxr.dll/libhostfxr.so/libhostfxr.dylib not found?](#why-i-am-getting-an-error-about-required-library-hostfxrdlllibhostfxrsolibhostfxrdylib-not-found)\n\n## Installation\n\nDownload and install the one of the currently supported [.NET SDKs](https://www.microsoft.com/net/download). Once installed, run the following command:\n\n```bash\ndotnet tool install --global dotnet-outdated-tool\n```\n\nIf you already have a previous version of **dotnet-outdated** installed, you can upgrade to the latest version using the following command:\n\n```bash\ndotnet tool update --global dotnet-outdated-tool\n```\n\n## Usage\n\n```text\nUsage: dotnet outdated [options] \u003cPath\u003e\n\nArguments:\n  Path                                                  The path to a .sln, .slnx, .slnf, .csproj or .fsproj file, or to a directory containing a .NET Core solution/project. If none is specified, the current directory will be used.\n\nOptions:\n  --version                                             Show version information.\n  -?|-h|--help                                          Show help information.\n  -i|--include-auto-references                          Specifies whether to include auto-referenced packages.\n  -pre|--pre-release \u003cPRERELEASE\u003e                       Specifies whether to look for pre-release versions of packages. Possible values: Auto (default), Always or Never.\n                                                        Allowed values are: Auto, Always, Never.\n                                                        Default value is: Auto.\n  -vl|--version-lock \u003cVERSION_LOCK\u003e                     Specifies whether the package should be locked to the current Major or Minor version. Possible values: None (default), Major or Minor.\n                                                        Allowed values are: None, Major, Minor.\n                                                        Default value is: None.\n  -t|--transitive                                       Specifies whether it should detect transitive dependencies.\n  -td|--transitive-depth \u003cTRANSITIVE_DEPTH\u003e             Defines how many levels deep transitive dependencies should be analyzed. Integer value (default = 1)\n                                                        Default value is: 1.\n  -u|--upgrade[:\u003cTYPE\u003e]                                 Specifies whether outdated packages should be upgraded. Possible values for \u003cTYPE\u003e is Auto (default) or Prompt.\n                                                        Allowed values are: Auto, Prompt.\n  -f|--fail-on-updates                                  Specifies whether it should return a non-zero exit code when updates are found.\n  -inc|--include \u003cFILTER_INCLUDE\u003e                       Specifies to only look at packages where the name contains the provided string. Culture and case insensitive. If provided multiple times, a single match\n                                                        is enough to include a package.\n  -exc|--exclude \u003cFILTER_EXCLUDE\u003e                       Specifies to only look at packages where the name does not contain the provided string. Culture and case insensitive. If provided multiple times, a single\n                                                        match is enough to exclude a package.\n  -o|--output \u003cOUTPUT_FILENAME\u003e                         Specifies the filename for a generated report. (Use the -of|--output-format option to specify the format. JSON by default.)\n  -of|--output-format \u003cOUTPUT_FILE_FORMAT\u003e              Specifies the output format for the generated report. Possible values: json (default), csv, or markdown.\n                                                        Allowed values are: Json, Csv, Markdown.\n                                                        Default value is: Json.\n  -ot|--older-than \u003cOLDER_THAN_DAYS\u003e                    Only include package versions that are older than the specified number of days.\n                                                        Default value is: 0.\n  -n|--no-restore                                       Add the reference without performing restore preview and compatibility check.\n  -r|--recursive                                        Recursively search for all projects within the provided directory.\n  -ifs|--ignore-failed-sources                          Treat package source failures as warnings.\n  -utd|--include-up-to-date                             Include all dependencies in the report even the ones not outdated.\n  -prl|--pre-release-label \u003cPRERELEASE_LABEL\u003e           Specifies an optional label to restrict matches to when looking for pre-release versions of packages. For example, a label of 'rc.1' would only match\n                                                        pre-release packages with a pre-release label that starts with that prefix.\n  -ncll|--nuget-cred-log-level \u003cNU_GET_CRED_LOG_LEVEL\u003e  Specifies the minimum level of logs for NuGet Credential Service. Possible values: debug, verbose, information, warning (default), or error\n                                                        Allowed values are: Debug, Verbose, Information, Minimal, Warning, Error.\n                                                        Default value is: Warning.\n  -rt|--runtime \u003cRUNTIME\u003e                               Specifies an optional runtime identifier to be used during the restore target when projects are analyzed.\n                                                        More information available on https://learn.microsoft.com/dotnet/core/rid-catalog.\n  -mv|--maximum-version \u003cMAX_VERSION\u003e                   The inclusive maximum package version to upgrade to. For example, a value of '8.0' would upgrade System.Text.Json 6.0.0 to the latest patch version of 8.0.x\n```\n\n![Screenshot of dotnet-outdated](screenshot.png)\n\n## Specifying the path\n\nYou can run **dotnet-outdated** without specifying the `Path` argument. In this case, it will look in the current directory for a solution (`.sln` or `.slnx`) and if one is found it will analyze that solution. If no solution is found it will look for a project (`.csproj` or `.fsproj`) and if one is found it will analyze that project. If more than one solution or project is found in the current folder, **dotnet-outdated** will report an error.\n\nYou can also pass a directory in the `Path` argument, in which case the same logic described above will be used, but in the directory specified.\n\nLastly, you can specify the path to a solution (`.sln` or `.slnx`) or project (`.csproj` or `.fsproj`) which **dotnet-outdated** must analyze.\n\n## Upgrading packages\n\n**dotnet-outdated** can automatically attempt to upgrade any outdated packages to the latest version by passing the `-u|--upgrade` option. You can let **dotnet-outdated** prompt you for each outdated package by using the `-u:prompt` option.\n\n## Working with secure feeds\n\n**dotnet-outdated** supports secure NuGet feeds, such as [MyGet](https://www.myget.org). It is suggested that you add these to your sources using the [source command of the NuGet CLI](https://docs.microsoft.com/en-us/nuget/tools/cli-ref-sources). For secure feeds, you can do one of the following:\n\n- Add a pre-authenticated URL.\n- Specify the username and password for the feed using the `-UserName` and `-Password` options of the `nuget sources` command.\n- Use a credential provider like [the Azure Artifacts credential provider](https://github.com/microsoft/artifacts-credprovider).\n\n**dotnet-outdated** supports computer-level, user-level and project-level configuration files.\n\nUsing credential providers requires an environment variable `DOTNET_HOST_PATH` that is set to the path to the `dotnet` executable (e.g., `/usr/local/share/dotnet/dotnet`). Some versions of the .NET Core SDK do this for you at runtime, some do not. You will get an error message explaining this if the process finds it missing.\n\n### Issues on macOS\n\nIn my testing, I ran into issues on macOS where the location of the user-level configuration file was not detected correctly. If you run into problems where **dotnet-outdated** does not appear to pick up your feeds correctly, please add the source to a project-level configuration file.\n\nAlso, on macOS and Linux, the password needs to be stored in clear text. You can do this by passing the `-StorePasswordInClearText` option to the `nuget sources` command.\n\n## Handling pre-release versions\n\n**dotnet-outdated** allows you to specify whether to use pre-release versions of packages or not by passing the `-pre|--pre-release` option.\n\nThe default value of `Auto` will determine whether to use pre-release versions of a package based on whether the referenced version itself is a pre-release version. If the referenced version is a pre-release version, **dotnet-outdated** will include newer pre-release versions of the package. If the referenced version is not a pre-release version, **dotnet-outdated** will ignore pre-release versions.\n\nYou can also tell **dotnet-outdated** to always include pre-release versions by passing the `Always` value for this option. Conversely, you can tell it to never include pre-release versions by passing the `Never` value.\n\n## Locking to the current major or minor release\n\n**dotnet-outdated** allows you to lock the version to the current major or minor version by passing the `-vl|--version-lock` option.\n\nThe default value of `None` will return the absolute latest package, regardless of whether it is a major or minor version upgrade.\n\nPassing a value of `Major` will only report on later packages in the current major version range. For example, if the current version for a package is `4.1.0`, **dotnet-outdated** will only report on later packages in the `4.x` version range.\n\nPassing a value of `Minor` will only report on later packages in the current minor version range. For example, if the current version for a package is `4.1.0`, **dotnet-outdated** will only report on later packages in the `4.1.x` version range.\n\n## Reporting on transitive dependencies\n\n**dotnet-outdated** supports reporting on transitive dependencies as well. These are NuGet packages on which the NuGet packages directly referenced by your application depends. To enable reporting on transitive dependencies, you can pass the `-t|--transitive` option.\n\n![Screenshot of analysing transitive-dependencies](transitive-screenshot.png)\n\nYou can also specify how many levels deep it should analyze transitive dependencies with the `-td|--transitive-depth` option. You can pass an integer value for this option (the default value is `1`).\n\n**Be careful with these options!**. If you try and analyze dependencies too many levels deep, the analysis can take a very long time.\n\n## Failing when updates are available\n\n**dotnet-outdated** can be easily incorporated into your build process. You can optionally enable a non-zero return code when updates are found to make failing a build easy to configure. To enable this option you can pass the `-f|--fail-on-updates` option.\n\n## Auto-references\n\nBefore version 1.2 of **dotnet-outdated**, it used to include automatically referenced packages in the output. The automatically referenced packages are typically your framework packages, such as `Microsoft.NETCore.App` or `NETStandard.Library`. It does not make sense reporting on these as outdated since you should target a new framework to have these updated.\n\nFrom version 1.2, if you want these packages reported, you can pass the `-i|--include-auto-references` option. These packages will also be denoted with the text **[A]** appearing in the output after the package name.\n\n## Saving results to a file\n\nYou can save the results of **dotnet-outdated** to a file by specifying the name of an output file using the `-o|--output` option. By default, the results will be saved in JSON format. You can specify an alternate format using the `-of|--output-format` option.\n\n## Including and excluding packages\n\nYou can choose to include only specific packages by using the `-inc|--include` option. Only packages whose name contain the specified value will be included. For example, if you only want to analyze packages containing the value \"microsoft\", you can use the command `dotnet outdated --include microsoft`. This option can be passed in multiple times: each package will be evaluated against all the filters. One single match is enough to include that package.\n\nConversely, you can exclude specific packages by using the `-exc|--exclude` option. In this case all packages will be analyzed except packages whose name contain the specified value. For example, if you want to exclude packages containing the value \"microsoft\", you can use the command `dotnet outdated --exclude microsoft`. This option can be passed in multiple times: each package will be evaluated against all filters. One single match is enough to exclude that package.\n\nPlease note that for both include and exclude, the comparison is culture and case insensitive.\n\n## Only listing new version of packages older than a specified the number of days\n\nThere are some packages that have new updates almost on daily basis, and it might slow down development and will break all CI builds if dotnet-outdated is integrated into the CI - so the development team needs to urgently react on every single update.\n\nThis command will let the developers finish their job and update the packages on their own pace.\n\nFor failing CI builds, a proposed protocol is to have another CI build which will be scheduled weekly to inform developers of new packages, and they will react accordingly.\n\nAlso, some companies/users do not feel comfortable jumping directly on the newest versions, as they might contain some bugs, and might want to wait for some time before updating to the newest package.\n\n## FAQ\n\n### Why are unrelated changes made to .csproj files when running with `-u`?\n\n`dotnet-outdated` does not make any changes to .csproj files directly. Instead, it runs `dotnet add package` to update packages, so that command is responsible for all changes made. To track issues related to this command, head over to the [.NET CLI repo](https://github.com/dotnet/cli)\n\n### Why I am getting an error about required library hostfxr.dll/libhostfxr.so/libhostfxr.dylib not found?\n\nIf you download the .NET Core CLI as a .zip/.tar.gz and extract it to a non default location, then you may encounter this error after installing and launching **dotnet-outdated**.\n\nYou can fix this error by setting the `DOTNET_ROOT` environment variable to point to the location of your .NET Core CLI installation. For more information, please refer to [this blog post](https://natemcmaster.com/blog/2018/05/12/dotnet-global-tools/#installing-the-net-core-cli-into-a-non-default-location).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet-outdated%2Fdotnet-outdated","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotnet-outdated%2Fdotnet-outdated","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnet-outdated%2Fdotnet-outdated/lists"}