{"id":30090731,"url":"https://github.com/doug-murphy/dougmurphy.targetframeworks.endoflife","last_synced_at":"2025-08-09T06:44:36.019Z","repository":{"id":45632209,"uuid":"429641553","full_name":"Doug-Murphy/DougMurphy.TargetFrameworks.EndOfLife","owner":"Doug-Murphy","description":"This NuGet package contains an API to help determine if your Target Framework Moniker is, or will soon be, end of life.","archived":false,"fork":false,"pushed_at":"2024-11-24T15:48:18.000Z","size":68,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-17T10:34:04.474Z","etag":null,"topics":["end","eol","framework","life","moniker","of","target","tfm"],"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/Doug-Murphy.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2021-11-19T02:12:59.000Z","updated_at":"2024-11-24T15:47:33.000Z","dependencies_parsed_at":"2024-11-24T16:29:13.655Z","dependency_job_id":"69aeabd7-9554-4f4e-b111-0af71a904012","html_url":"https://github.com/Doug-Murphy/DougMurphy.TargetFrameworks.EndOfLife","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/Doug-Murphy/DougMurphy.TargetFrameworks.EndOfLife","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Doug-Murphy%2FDougMurphy.TargetFrameworks.EndOfLife","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Doug-Murphy%2FDougMurphy.TargetFrameworks.EndOfLife/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Doug-Murphy%2FDougMurphy.TargetFrameworks.EndOfLife/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Doug-Murphy%2FDougMurphy.TargetFrameworks.EndOfLife/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Doug-Murphy","download_url":"https://codeload.github.com/Doug-Murphy/DougMurphy.TargetFrameworks.EndOfLife/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Doug-Murphy%2FDougMurphy.TargetFrameworks.EndOfLife/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269542776,"owners_count":24435169,"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","status":"online","status_checked_at":"2025-08-09T02:00:10.424Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["end","eol","framework","life","moniker","of","target","tfm"],"created_at":"2025-08-09T06:44:35.328Z","updated_at":"2025-08-09T06:44:35.981Z","avatar_url":"https://github.com/Doug-Murphy.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Nuget Version](https://img.shields.io/nuget/v/DougMurphy.TargetFrameworks.EndOfLife?label=nuget.org)\n![Nuget Downloads](https://img.shields.io/nuget/dt/DougMurphy.TargetFrameworks.EndOfLife)\n\n# Introduction\n\nKnowing if your Target Framework Moniker (TFM) is End of Life (EOL) or not can be very important in certain circumstances.\nMaybe your company requires using supported target frameworks for compliance reasons, maybe you're publishing a NuGet package and want to make sure you're only supporting frameworks that Microsoft supports, or maybe you just want to make sure you're staying up-to-date.\nNo matter the reason, this NuGet package can help you out with that.\n\n# Methods\n\n## GetAllEndOfLifeTargetFrameworkMonikers\nBy default, this method will get all TFMs that are currently EOL. Two overloads are provided where you can either pass in an explicit `DateTime` to get all TFMs that will be EOL by that date, or a `TimeframeUnit` with an amount to forecast out to a date relative to current date.\n\n## CheckTargetFrameworkForEndOfLife\nThis method takes in a singular TFM or semicolon-delimited pluralized TFM and returns back which one(s), if any, of them are currently EOL.\n\n# Example Usage\n\n## Checking if a specific TFM is EOL\n```c#\nusing DougMurphy.TargetFrameworks.EndOfLife.Enums;\nusing DougMurphy.TargetFrameworks.EndOfLife.Helpers;\nusing DougMurphy.TargetFrameworks.EndOfLife.Models;\nusing System;\nusing System.Collections.Generic;\n\npublic void CheckIfSingleTfmIsEol() {\n    var tfm = \"net5.0\";\n    TargetFrameworkCheckResponse endOfLifeResults = TargetFrameworkEndOfLifeHelper.CheckTargetFrameworkForEndOfLife(tfm);\n\n    if (endOfLifeResults.EndOfLifeTargetFrameworks.Count == 0) {\n        //the specified TFM is not EOL\n    }\n    else {\n        //the specified TFM is EOL\n        foreach (KeyValuePair\u003cstring, DateTime\u003e endOfLifeTargetFramework in endOfLifeResults.EndOfLifeTargetFrameworks) {\n            Console.WriteLine($\"{endOfLifeTargetFramework.Key} has an EOL date of {endOfLifeTargetFramework.Value}\");\n        }\n    }\n}\n\npublic void CheckIfAnyOfMultipleTfmIsEol() {\n    var tfm = \"net5.0;net45\";\n    TargetFrameworkCheckResponse endOfLifeResults = TargetFrameworkEndOfLifeHelper.CheckTargetFrameworkForEndOfLife(tfm);\n\n    if (endOfLifeResults.EndOfLifeTargetFrameworks.Count == 0) {\n        //none of the specified TFMs are EOL\n    }\n    else {\n        //at least one of the specified TFMs are EOL\n        foreach (KeyValuePair\u003cstring, DateTime\u003e endOfLifeTargetFramework in endOfLifeResults.EndOfLifeTargetFrameworks) {\n            Console.WriteLine($\"{endOfLifeTargetFramework.Key} has an EOL date of {endOfLifeTargetFramework.Value}\");\n        }\n    }\n}\n\npublic void CheckIfSingleTfmIsEolWithinThreeMonths() {\n    var tfm = \"net5.0\";\n    TargetFrameworkCheckResponse endOfLifeResults = TargetFrameworkEndOfLifeHelper.CheckTargetFrameworkForEndOfLife(tfm, TimeframeUnit.Month, 3);\n\n    if (endOfLifeResults.EndOfLifeTargetFrameworks.Count == 0) {\n        //the specified TFM is not EOL\n    }\n    else {\n        //the specified TFM is EOL\n        foreach (KeyValuePair\u003cstring, DateTime\u003e endOfLifeTargetFramework in endOfLifeResults.EndOfLifeTargetFrameworks) {\n            Console.WriteLine($\"{endOfLifeTargetFramework.Key} has an EOL date of {endOfLifeTargetFramework.Value}\");\n        }\n    }\n}\n\npublic void CheckIfAnyOfMultipleTfmIsEolWithinThreeMonths() {\n    var tfm = \"net5.0;net45\";\n    TargetFrameworkCheckResponse endOfLifeResults = TargetFrameworkEndOfLifeHelper.CheckTargetFrameworkForEndOfLife(tfm, TimeframeUnit.Month, 3);\n\n    if (endOfLifeResults.EndOfLifeTargetFrameworks.Count == 0) {\n        //none of the specified TFMs are EOL\n    }\n    else {\n        //at least one of the specified TFMs are EOL\n        foreach (KeyValuePair\u003cstring, DateTime\u003e endOfLifeTargetFramework in endOfLifeResults.EndOfLifeTargetFrameworks) {\n            Console.WriteLine($\"{endOfLifeTargetFramework.Key} has an EOL date of {endOfLifeTargetFramework.Value}\");\n        }\n    }\n}\n```\n\n## Getting a list of TFMs that are currently EOL, or will be within a specified forecasted timeframe\n\n```c#\nusing DougMurphy.TargetFrameworks.EndOfLife.Enums;\nusing DougMurphy.TargetFrameworks.EndOfLife.Helpers;\nusing DougMurphy.TargetFrameworks.EndOfLife.Models;\nusing System;\nusing System.Collections.Generic;\n\npublic void GetAllTfmsThatAreEol() {\n    TargetFrameworkCheckResponse endOfLifeResults = TargetFrameworkEndOfLifeHelper.GetAllEndOfLifeTargetFrameworkMonikers();\n\n    foreach (KeyValuePair\u003cstring, DateTime\u003e endOfLifeTargetFramework in endOfLifeResults.EndOfLifeTargetFrameworks) {\n        Console.WriteLine($\"{endOfLifeTargetFramework.Key} has an EOL date of {endOfLifeTargetFramework.Value}\");\n    }\n}\n\npublic void GetAllTfmsThatAreEolWithinOneYear() {\n    //Get all EOL TFMs that are currently EOL, or will be EOL within 1 year of current date.\n    TargetFrameworkCheckResponse endOfLifeResults = TargetFrameworkEndOfLifeHelper.GetAllEndOfLifeTargetFrameworkMonikers(TimeframeUnit.Year, 1);\n\n    foreach (KeyValuePair\u003cstring, DateTime\u003e endOfLifeTargetFramework in endOfLifeResults.EndOfLifeTargetFrameworks) {\n        Console.WriteLine($\"{endOfLifeTargetFramework.Key} has an EOL date of {endOfLifeTargetFramework.Value}\");\n    }\n}\n```\n\n# Web API Host\nIf you don't have something set up to automatically update your NuGet packages, and you don't want to worry about updating this one as new TFMs and EOL dates are added, check out [my API on GitHub](https://github.com/Doug-Murphy/EndOfLifeApi) for hassle-free updates!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoug-murphy%2Fdougmurphy.targetframeworks.endoflife","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoug-murphy%2Fdougmurphy.targetframeworks.endoflife","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoug-murphy%2Fdougmurphy.targetframeworks.endoflife/lists"}