CINXE.COM

.NET Standard - .NET | Microsoft Learn

<!DOCTYPE html><html class="hasSidebar hasPageActions hasBreadcrumb conceptual has-default-focus theme-light" lang="en-us" dir="ltr" data-authenticated="false" data-auth-status-determined="false" data-target="docs" x-ms-format-detection="none"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta property="og:title" content=".NET Standard - .NET" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://learn.microsoft.com/en-us/dotnet/standard/net-standard" /><meta property="og:description" content="Learn about .NET Standard, its versions, and the .NET implementations that support it." /><meta property="og:image" content="https://learn.microsoft.com/dotnet/media/dot-net-cross-platform.png" /> <meta property="og:image:alt" content=".NET Standard - .NET | Microsoft Learn" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:site" content="@MicrosoftLearn" /> <meta name="color-scheme" content="light dark"><meta name="apiPlatform" content="dotnet" /> <meta name="author" content="gewarren" /> <meta name="breadcrumb_path" content="/dotnet/breadcrumb/toc.json" /> <meta name="depot_name" content="VS.core-docs" /> <meta name="description" content="Learn about .NET Standard, its versions, and the .NET implementations that support it." /> <meta name="document_id" content="9eb8b774-c6f0-8235-6964-15219baf2ea7" /> <meta name="document_version_independent_id" content="6819a4a7-7527-d8c7-e132-767f7344e00e" /> <meta name="feedback_help_link_type" content="" /> <meta name="feedback_help_link_url" content="" /> <meta name="feedback_product_url" content="https://aka.ms/feedback/report?space=61" /> <meta name="feedback_system" content="OpenSource" /> <meta name="git_commit_id" content="69bbf3c3cac2d47ce01b0fe0c1301a218ec6e0ad" /> <meta name="gitcommit" content="https://github.com/dotnet/docs/blob/69bbf3c3cac2d47ce01b0fe0c1301a218ec6e0ad/docs/standard/net-standard.md" /> <meta name="locale" content="en-us" /> <meta name="ms.assetid" content="c044882c-af15-45f2-96d1-534557a5ee9b" /> <meta name="ms.author" content="gewarren" /> <meta name="ms.custom" content="updateeachrelease" /> <meta name="ms.date" content="11/11/2024" /> <meta name="ms.devlang" content="dotnet" /> <meta name="ms.service" content="dotnet" /> <meta name="ms.subservice" content="standard-library" /> <meta name="ms.topic" content="conceptual" /> <meta name="original_content_git_url" content="https://github.com/dotnet/docs/blob/live/docs/standard/net-standard.md" /> <meta name="page_type" content="conceptual" /> <meta name="pdf_url_template" content="https://learn.microsoft.com/pdfstore/en-us/VS.core-docs/{branchName}{pdfName}" /> <meta name="schema" content="Conceptual" /> <meta name="search.mshattr.devlang" content="csharp" /> <meta name="show_latex" content="true" /> <meta name="site_name" content="Docs" /> <meta name="toc_rel" content="../fundamentals/toc.json" /> <meta name="uhfHeaderId" content="MSDocsHeader-DotNet" /> <meta name="updated_at" content="2024-11-12 08:27 AM" /> <meta name="word_count" content="3075" /> <meta name="persistent_id" content="10ffeb11-43b5-6383-f21e-670386fd0906" /> <meta name="cmProducts" content="https://authoring-docs-microsoft.poolparty.biz/devrel/7696cda6-0510-47f6-8302-71bb5d2e28cf" data-source="generated" /> <meta name="spProducts" content="https://authoring-docs-microsoft.poolparty.biz/devrel/69c76c32-967e-4c65-b89a-74cc527db725" data-source="generated" /> <meta name="scope" content=".NET" /><meta name="github_feedback_content_git_url" content="https://github.com/dotnet/docs/blob/main/docs/standard/net-standard.md" /><link href="https://learn.microsoft.com/en-us/dotnet/standard/net-standard" rel="canonical"><title>.NET Standard - .NET | Microsoft Learn</title><link rel="stylesheet" href="/static/assets/0.4.028726178/styles/site-ltr.css"> <script id="msdocs-script"> var msDocs = {environment: { supportLevel: 'production', accessLevel: 'online', reviewFeatures: false, systemContent: true, azurePortalHostname: 'portal.azure.com', legacyHosting: false, siteName: 'learn', },data: { timeOrigin: Date.now(), contentLocale: 'en-us', contentDir: 'ltr', userLocale: 'en-us', userDir: 'ltr', pageTemplate: 'Conceptual', brand: '', context: {}, hasBinaryRating: true, feedbackHelpLinkType:'', feedbackHelpLinkUrl:'', standardFeedback: false, showFeedbackReport: false, enableTutorialFeedback: false, feedbackSystem: 'OpenSource', feedbackGitHubRepo: 'dotnet/docs', feedbackProductUrl: 'https://aka.ms/feedback/report?space=61',extendBreadcrumb: false,isEditDisplayable: true, hideViewSource: false, hasPageActions: true, hasPrintButton: true, hasBookmark: true, hasShare: true, isPermissioned: false, isPrivateUnauthorized: false,hasRecommendations: true,openSourceFeedback: true, openSourceFeedbackIssueUrl: 'https://github.com/dotnet/docs/issues/new?template=z-customer-feedback.yml', openSourceFeedbackIssueTitle: '', openSourceFeedbackIssueLabels: '',contributors: [{ name: "gewarren", url: "https://github.com/gewarren" },{ name: "BillWagner", url: "https://github.com/BillWagner" },{ name: "samwherever", url: "https://github.com/samwherever" },{ name: "alexbuckgit", url: "https://github.com/alexbuckgit" },{ name: "IEvangelist", url: "https://github.com/IEvangelist" },{ name: "tdykstra", url: "https://github.com/tdykstra" },{ name: "Youssef1313", url: "https://github.com/Youssef1313" },{ name: "mairaw", url: "https://github.com/mairaw" },{ name: "terrajobst", url: "https://github.com/terrajobst" },{ name: "bilaldjouab", url: "https://github.com/bilaldjouab" },{ name: "Soundug", url: "https://github.com/Soundug" },{ name: "LorenzCK", url: "https://github.com/LorenzCK" },{ name: "nemrism", url: "https://github.com/nemrism" },{ name: "rocifier", url: "https://github.com/rocifier" },{ name: "timotei", url: "https://github.com/timotei" },{ name: "Mikejo5000", url: "https://github.com/Mikejo5000" },{ name: "MarcoRossignoli", url: "https://github.com/MarcoRossignoli" },{ name: "tompratt-AQ", url: "https://github.com/tompratt-AQ" },{ name: "guardrex", url: "https://github.com/guardrex" }],mathjax: {},}, functions:{} }; </script><script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <script src="https://js.monitor.azure.com/scripts/c/ms.jsll-4.min.js"></script><script src="/static/assets/0.4.028726178/global/deprecation.js"></script><script src="/static/assets/0.4.028726178/scripts/en-us/index-docs.js"></script></head> <body lang="en-us" dir="ltr"> <div class="header-holder has-default-focus"> <a href="#main" style="z-index: 1070" class="outline-color-text visually-hidden-until-focused position-fixed inner-focus focus-visible top-0 left-0 right-0 padding-xs text-align-center has-body-background" tabindex="1">Skip to main content</a><div hidden id="cookie-consent-holder" data-test-id="cookie-consent-container"></div> <div id="unsupported-browser" style=" background-color: white; color: black; padding: 16px; border-bottom: 1px solid grey;" hidden > <div style="max-width: 800px; margin: 0 auto;"> <p style="font-size: 24px">This browser is no longer supported.</p> <p style="font-size: 16px; margin-top: 16px;">Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.</p> <div style="margin-top: 12px;"> <a href="https://go.microsoft.com/fwlink/p/?LinkID=2092881 " style=" background-color: #0078d4; border: 1px solid #0078d4; color: white; padding: 6px 12px; border-radius: 2px; display: inline-block; ">Download Microsoft Edge</a> <a href="https://learn.microsoft.com/en-us/lifecycle/faq/internet-explorer-microsoft-edge" style=" background-color: white; padding: 6px 12px; border: 1px solid #505050; color: #171717; border-radius: 2px; display: inline-block; ">More info about Internet Explorer and Microsoft Edge</a> </div> </div> </div> <!-- liquid-tag banners global --> <!-- site header --> <header id="ms--site-header" data-test-id="site-header-wrapper" role="banner" itemscope="itemscope" itemtype="http://schema.org/Organization"> <div id="ms--mobile-nav" class="site-header display-none-tablet padding-inline-none gap-none" data-bi-name="mobile-header" data-test-id="mobile-header"></div> <div id="ms--primary-nav" class="site-header display-none display-flex-tablet" data-bi-name="L1-header" data-test-id="primary-header"></div> <div id="ms--secondary-nav" class="site-header display-none display-flex-tablet" data-bi-name="L2-header" data-test-id="secondary-header"></div> </header><div id="content-header" class="content-header uhf-container has-padding has-default-focus border-bottom-none" data-bi-name="content-header"> <div class="content-header-controls margin-xxs margin-inline-sm-tablet"> <button type="button" class="contents-button button button-sm margin-right-xxs" data-bi-name="contents-expand" aria-haspopup="true" data-contents-button> <span class="icon"><span class="docon docon-menu" aria-hidden="true"></span></span> <span class="contents-expand-title">Table of contents</span> </button> <button type="button" class="ap-collapse-behavior ap-expanded button button-sm" data-bi-name="ap-collapse" aria-controls="action-panel"> <span class="icon"><span class="docon docon-exit-mode" aria-hidden="true"></span></span> <span>Exit focus mode</span> </button> </div> </div><div id="disclaimer-holder" class="has-overflow-hidden has-default-focus"> <!-- liquid-tag banners sectional --> </div> </div> <div class="mainContainer uhf-container has-default-focus" data-bi-name="body"> <div class="columns has-large-gaps is-gapless-mobile "><div id="left-container" class="left-container is-hidden-mobile column is-one-third-tablet is-one-quarter-desktop"> <nav id="affixed-left-container" class="margin-top-sm-tablet position-sticky display-flex flex-direction-column" aria-label="Primary"></nav> </div><!-- .primary-holder --> <section class="primary-holder column is-two-thirds-tablet is-three-quarters-desktop"> <!--div.columns --> <div class="columns is-gapless-mobile has-large-gaps "><div id="main-column" class="column is-full is-8-desktop"> <main id="main" class="" role="main" data-bi-name="content" lang="en-us" dir="ltr"><!-- article-header --> <div id="article-header" class="background-color-body margin-top-sm-tablet margin-bottom-xs display-none-print"> <div class="display-flex align-items-center "><details id="article-header-breadcrumbs-overflow-popover" class="popover" data-for="article-header-breadcrumbs"> <summary class="button button-clear button-primary button-sm inner-focus" aria-label="All breadcrumbs"> <span class="icon"> <span class="docon docon-more"></span> </span> </summary> <div id="article-header-breadcrumbs-overflow" class="popover-content padding-none"> </div> </details> <bread-crumbs id="article-header-breadcrumbs" data-test-id="article-header-breadcrumbs" class="overflow-hidden flex-grow-1 margin-right-sm margin-right-md-tablet margin-right-lg-desktop margin-left-negative-xxs padding-left-xxs"></bread-crumbs><div id="article-header-page-actions" class="opacity-none margin-left-auto display-flex flex-wrap-no-wrap align-items-stretch"><a id="lang-link-tablet" class="button button-primary button-clear button-sm display-none display-inline-flex-tablet" title="Read in English" data-bi-name="language-toggle" data-read-in-link hidden> <span class="icon margin-none" aria-hidden="true" data-read-in-link-icon> <span class="docon docon-locale-globe"></span> </span> <span class="is-visually-hidden" data-read-in-link-text>Read in English</span> </a><button type="button" class="collection button button-clear button-sm button-primary display-none display-inline-flex-tablet" data-list-type="collection" data-bi-name="collection" title="Add to collection"> <span class="icon margin-none" aria-hidden="true"> <span class="docon docon-circle-addition"></span> </span> <span class="collection-status is-visually-hidden">Save</span> </button><a data-contenteditbtn class="button button-clear button-sm text-decoration-none button-primary display-none display-inline-flex-tablet" aria-label="Edit" title="Edit This Document" data-bi-name="edit" href="https://github.com/dotnet/docs/blob/main/docs/standard/net-standard.md" data-original_content_git_url="https://github.com/dotnet/docs/blob/live/docs/standard/net-standard.md" data-original_content_git_url_template="{repo}/blob/{branch}/docs/standard/net-standard.md" data-pr_repo="" data-pr_branch=""> <span class="icon margin-none" aria-hidden="true"> <span class="docon docon-edit-outline"></span> </span> </a> <details class="popover popover-right" id="article-header-page-actions-overflow"> <summary class="justify-content-flex-start button button-clear button-sm button-primary" aria-label="More actions" title="More actions"> <span class="icon" aria-hidden="true"> <span class="docon docon-more-vertical"></span> </span> </summary> <div class="popover-content padding-xs"><button data-page-action-item="overflow-mobile" type="button" class="justify-content-flex-start button-block button-sm has-inner-focus button button-clear display-none-tablet" data-bi-name="contents-expand" data-contents-button data-popover-close> <span class="icon"> <span class="docon docon-editor-list-bullet" aria-hidden="true"></span> </span><span class="contents-expand-title">Table of contents</span></button><a id="lang-link-overflow" class="justify-content-flex-start button-sm has-inner-focus button button-clear button-block display-none-tablet" title="Read in English" data-bi-name="language-toggle" data-page-action-item="overflow-mobile" data-check-hidden="true" data-read-in-link hidden > <span class="icon" aria-hidden="true" data-read-in-link-icon> <span class="docon docon-locale-globe"></span> </span> <span data-read-in-link-text>Read in English</span> </a><button type="button" class="collection justify-content-flex-start button button-clear button-sm has-inner-focus button-block display-none-tablet" data-list-type="collection" data-bi-name="collection" title="Save" data-page-action-item="overflow-mobile" data-check-hidden="true" data-popover-close> <span class="icon" aria-hidden="true"> <span class="docon docon-circle-addition"></span> </span> <span class="collection-status">Save</span> </button> <button type="button" class="collection justify-content-flex-start button button-clear button-sm has-inner-focus button-block display-none-tablet" data-list-type="plan" data-bi-name="plan" title="Add to Plan" data-page-action-item="overflow-mobile" data-check-hidden="true" data-popover-close hidden> <span class="icon" aria-hidden="true"> <span class="docon docon-circle-addition"></span> </span> <span class="plan-status">Add to Plan</span> </button><a data-contenteditbtn class="button button-clear button-block button-sm has-inner-focus justify-content-flex-start text-decoration-none display-none-tablet" aria-label="Edit" title="Edit This Document" data-bi-name="edit" href="https://github.com/dotnet/docs/blob/main/docs/standard/net-standard.md" data-original_content_git_url="https://github.com/dotnet/docs/blob/live/docs/standard/net-standard.md" data-original_content_git_url_template="{repo}/blob/{branch}/docs/standard/net-standard.md" data-pr_repo="" data-pr_branch=""> <span class="icon" aria-hidden="true"> <span class="docon docon-edit-outline"></span> </span> <span>Edit</span> </a><div aria-hidden="true" class="margin-none" data-page-action-item="overflow-all"></div> <hr class="display-none-tablet margin-bottom-xxs margin-top-xxs" /> <h4 class="font-size-sm padding-left-xxs">Share via</h4> <a class="button button-clear button-sm button-block has-inner-focus text-decoration-none justify-content-flex-start share-facebook" data-bi-name="facebook" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-facebook-share font-size-md color-primary"></span> </span> <span class="margin-left-xxs">Facebook</span> </a> <a class="button button-clear button-sm has-inner-focus button-block text-decoration-none justify-content-flex-start share-twitter" data-bi-name="twitter" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-xlogo-share font-size-xxs"></span> </span> <span class="margin-left-xxs">x.com</span> </a> <a class="button button-clear button-sm has-inner-focus button-block text-decoration-none justify-content-flex-start share-linkedin" data-bi-name="linkedin" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-linked-in-logo font-size-sm color-primary"></span> </span> <span class="margin-left-xxs">LinkedIn</span> </a> <a class="button button-clear button-sm button-block has-inner-focus text-decoration-none justify-content-flex-start margin-bottom-xxs share-email" data-bi-name="email" data-page-action-item="overflow-all"> <span class="icon" aria-hidden="true"> <span class="docon docon-mail-message font-size-sm color-primary"></span> </span> <span class="margin-left-xxs">Email</span> </a><hr /> <button class="button button-block button-clear button-sm justify-content-flex-start has-inner-focus margin-top-xxs" title="Print" type="button" aria-label="Print" data-bi-name="print" data-page-action-item="overflow-all" data-popover-close data-print-page data-check-hidden="true"> <span class="icon" aria-hidden="true"> <span class="docon docon-print font-size-sm color-primary"></span> </span> <span class="margin-left-xxs">Print</span> </button> </div> </details> </div></div> </div> <!-- end article-header --><div> <button type="button" class="border contents-button button button-clear button-sm is-hidden-tablet has-inner-focus" data-bi-name="contents-expand" data-contents-button hidden> <span class="icon"> <span class="docon docon-editor-list-bullet" aria-hidden="true"></span> </span><span class="contents-expand-title">Table of contents</span></button> </div><!-- end mobile-contents button --> <div class="content "><h1 id="net-standard">.NET Standard</h1><div class="display-flex justify-content-space-between align-items-center flex-wrap-wrap page-metadata-container"> <div class="margin-right-xxs"> <ul class="metadata page-metadata" data-bi-name="page info" lang="en-us" dir="ltr"><li>Article</li><li class="visibility-hidden-visual-diff"><time class="is-invisible" data-article-date aria-label="Article review date" datetime="2024-11-11T08:00:00Z" data-article-date-source="calculated">11/11/2024</time> </li><li class="contributors-holder display-none-print"> <button aria-label="View all contributors" class="contributors-button link-button" data-bi-name="contributors" title="View all contributors">19 contributors</button> </li></ul> </div> <div id="user-feedback" class="margin-block-xxs display-none-print" data-hide-on-archived> <button id="user-feedback-button" data-test-id="conceptual-feedback-button" class="button button-sm button-clear button-primary" type="button" data-bi-name="user-feedback-button" data-user-feedback-button > <span class="icon" aria-hidden="true"> <span class="docon docon-like"></span> </span> <span>Feedback</span> </button> </div></div><nav id="center-doc-outline" class="doc-outline is-hidden-desktop display-none-print margin-bottom-sm" data-bi-name="intopic toc" aria-label="In this article"> <h2 id="ms--in-this-article" class="title is-6 margin-block-xs">In this article</h2> </nav><!-- <content> --><p>.NET Standard is a formal specification of .NET APIs that are available on multiple .NET implementations. The motivation behind .NET Standard was to establish greater uniformity in the .NET ecosystem. .NET 5 and later versions adopt a different approach to establishing uniformity that eliminates the need for .NET Standard in most scenarios. However, if you want to share code between .NET Framework and any other .NET implementation, such as .NET Core, your library should target .NET Standard 2.0. <a href="https://devblogs.microsoft.com/dotnet/the-future-of-net-standard/" data-linktype="external">No new versions of .NET Standard will be released</a>, but .NET 5 and all later versions will continue to support .NET Standard 2.1 and earlier.</p> <p>For information about choosing between .NET 5+ and .NET Standard, see <a href="#net-5-and-net-standard" data-linktype="self-bookmark">.NET 5+ and .NET Standard</a> later in this article.</p> <p><span id="net-implementation-support"></span></p> <h2 id="net-standard-versions">.NET Standard versions</h2> <p>.NET Standard is versioned. Each new version adds more APIs. When a library is built against a certain version of .NET Standard, it can run on any .NET implementation that implements that version of .NET Standard (or higher).</p> <p>Targeting a higher version of .NET Standard allows a library to use more APIs but means it can only be used on more recent versions of .NET. Targeting a lower version reduces the available APIs but means the library can run in more places.</p> <h3 id="select-net-standard-version">Select .NET Standard version</h3> <div class="tabGroup" id="tabgroup_1"> <ul role="tablist"> <li role="presentation"> <a href="#tabpanel_1_net-standard-1-0" role="tab" aria-controls="tabpanel_1_net-standard-1-0" data-tab="net-standard-1-0" tabindex="0" aria-selected="true" data-linktype="self-bookmark">1.0</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-1-1" role="tab" aria-controls="tabpanel_1_net-standard-1-1" data-tab="net-standard-1-1" tabindex="-1" data-linktype="self-bookmark">1.1</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-1-2" role="tab" aria-controls="tabpanel_1_net-standard-1-2" data-tab="net-standard-1-2" tabindex="-1" data-linktype="self-bookmark">1.2</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-1-3" role="tab" aria-controls="tabpanel_1_net-standard-1-3" data-tab="net-standard-1-3" tabindex="-1" data-linktype="self-bookmark">1.3</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-1-4" role="tab" aria-controls="tabpanel_1_net-standard-1-4" data-tab="net-standard-1-4" tabindex="-1" data-linktype="self-bookmark">1.4</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-1-5" role="tab" aria-controls="tabpanel_1_net-standard-1-5" data-tab="net-standard-1-5" tabindex="-1" data-linktype="self-bookmark">1.5</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-1-6" role="tab" aria-controls="tabpanel_1_net-standard-1-6" data-tab="net-standard-1-6" tabindex="-1" data-linktype="self-bookmark">1.6</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-2-0" role="tab" aria-controls="tabpanel_1_net-standard-2-0" data-tab="net-standard-2-0" tabindex="-1" data-linktype="self-bookmark">2.0</a> </li> <li role="presentation"> <a href="#tabpanel_1_net-standard-2-1" role="tab" aria-controls="tabpanel_1_net-standard-2-1" data-tab="net-standard-2-1" tabindex="-1" data-linktype="self-bookmark">2.1</a> </li> </ul> <section id="tabpanel_1_net-standard-1-0" role="tabpanel" data-tab="net-standard-1-0"> <p>.NET Standard 1.0 has 7,949 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework</td> <td>4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>4.6, 5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.0, 10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.0, 3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>7.0, 8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>8.0, 8.1, 10.0, 10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard1.0.md" data-linktype="external">.NET Standard 1.0</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-1-1" role="tabpanel" data-tab="net-standard-1-1" aria-hidden="true" hidden="hidden"> <p>.NET Standard 1.1 has 10,239 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework</td> <td>4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>4.6, 5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.0, 10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.0, 3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>7.0, 8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>8.0, 8.1, 10.0, 10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard1.1.md" data-linktype="external">.NET Standard 1.1</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-1-2" role="tabpanel" data-tab="net-standard-1-2" aria-hidden="true" hidden="hidden"> <p>.NET Standard 1.2 has 10,285 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework</td> <td>4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>4.6, 5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.0, 10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.0, 3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>7.0, 8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>8.1, 10.0, 10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard1.2.md" data-linktype="external">.NET Standard 1.2</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-1-3" role="tabpanel" data-tab="net-standard-1-3" aria-hidden="true" hidden="hidden"> <p>.NET Standard 1.3 has 13,122 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework</td> <td>4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>4.6, 5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.0, 10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.0, 3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>7.0, 8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>10.0, 10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard1.3.md" data-linktype="external">.NET Standard 1.3</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-1-4" role="tabpanel" data-tab="net-standard-1-4" aria-hidden="true" hidden="hidden"> <p>.NET Standard 1.4 has 13,140 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework</td> <td>4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>4.6, 5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.0, 10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.0, 3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>7.0, 8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>10.0, 10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard1.4.md" data-linktype="external">.NET Standard 1.4</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-1-5" role="tabpanel" data-tab="net-standard-1-5" aria-hidden="true" hidden="hidden"> <p>.NET Standard 1.5 has 13,355 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework <sup>1</sup></td> <td>4.6.1 <sup>2</sup>, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>4.6, 5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.0, 10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.0, 3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>7.0, 8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p><sup>1</sup> The versions listed for .NET Framework apply to .NET Core 2.0 SDK and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can <a href="https://github.com/dotnet/core/blob/main/release-notes/download-archives" data-linktype="external">download tooling for .NET Core tools for Visual Studio 2015</a> if you cannot upgrade to Visual Studio 2017 or a later version.</p> <p><sup>2</sup> The versions listed here represent the rules that NuGet uses to determine whether a given .NET Standard library is applicable. While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.</p> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard1.5.md" data-linktype="external">.NET Standard 1.5</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-1-6" role="tabpanel" data-tab="net-standard-1-6" aria-hidden="true" hidden="hidden"> <p>.NET Standard 1.6 has 13,501 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>1.0, 1.1, 2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework <sup>1</sup></td> <td>4.6.1 <sup>2</sup>, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>4.6, 5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.0, 10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.0, 3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>7.0, 8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p><sup>1</sup> The versions listed for .NET Framework apply to .NET Core 2.0 SDK and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can <a href="https://github.com/dotnet/core/blob/main/release-notes/download-archives" data-linktype="external">download tooling for .NET Core tools for Visual Studio 2015</a> if you cannot upgrade to Visual Studio 2017 or a later version.</p> <p><sup>2</sup> The versions listed here represent the rules that NuGet uses to determine whether a given .NET Standard library is applicable. While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.</p> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard1.6.md" data-linktype="external">.NET Standard 1.6</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-2-0" role="tabpanel" data-tab="net-standard-2-0" aria-hidden="true" hidden="hidden"> <p>.NET Standard 2.0 has 32,638 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>2.0, 2.1, 2.2, 3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework <sup>1</sup></td> <td>4.6.1 <sup>2</sup>, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1</td> </tr> <tr> <td>Mono</td> <td>5.4, 6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>10.14, 12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>3.8, 5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>8.0, 10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>10.0.16299, TBD</td> </tr> <tr> <td>Unity</td> <td>2018.1</td> </tr> </tbody> </table> <p><sup>1</sup> The versions listed for .NET Framework apply to .NET Core 2.0 SDK and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can <a href="https://github.com/dotnet/core/blob/main/release-notes/download-archives" data-linktype="external">download tooling for .NET Core tools for Visual Studio 2015</a> if you cannot upgrade to Visual Studio 2017 or a later version.</p> <p><sup>2</sup> The versions listed here represent the rules that NuGet uses to determine whether a given .NET Standard library is applicable. While NuGet considers .NET Framework 4.6.1 as supporting .NET Standard 1.5 through 2.0, there are several issues with consuming .NET Standard libraries that were built for those versions from .NET Framework 4.6.1 projects. For .NET Framework projects that need to use such libraries, we recommend that you upgrade the project to target .NET Framework 4.7.2 or higher.</p> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard2.0.md" data-linktype="external">.NET Standard 2.0</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> <section id="tabpanel_1_net-standard-2-1" role="tabpanel" data-tab="net-standard-2-1" aria-hidden="true" hidden="hidden"> <p>.NET Standard 2.1 has 37,118 of the 37,118 available APIs.</p> <table> <thead> <tr> <th>.NET implementation</th> <th>Version support</th> </tr> </thead> <tbody> <tr> <td>.NET and .NET Core</td> <td>3.0, 3.1, 5.0, 6.0, 7.0, 8.0, 9.0</td> </tr> <tr> <td>.NET Framework <sup>1</sup></td> <td>N/A<sup>2</sup></td> </tr> <tr> <td>Mono</td> <td>6.4</td> </tr> <tr> <td>Xamarin.iOS</td> <td>12.16</td> </tr> <tr> <td>Xamarin.Mac</td> <td>5.16</td> </tr> <tr> <td>Xamarin.Android</td> <td>10.0</td> </tr> <tr> <td>Universal Windows Platform</td> <td>N/A<sup>3</sup></td> </tr> <tr> <td>Unity</td> <td>2021.2</td> </tr> </tbody> </table> <p><sup>1</sup> The versions listed for .NET Framework apply to .NET Core 2.0 SDK and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can <a href="https://github.com/dotnet/core/blob/main/release-notes/download-archives" data-linktype="external">download tooling for .NET Core tools for Visual Studio 2015</a> if you cannot upgrade to Visual Studio 2017 or a later version.</p> <p><sup>2</sup> .NET Framework doesn't support .NET Standard 2.1. For more information, see the <a href="https://devblogs.microsoft.com/dotnet/announcing-net-standard-2-1/" data-linktype="external">announcement of .NET Standard 2.1</a>.</p> <p><sup>3</sup> UWP doesn't support .NET Standard 2.1.</p> <p>For more information, see <a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard2.1.md" data-linktype="external">.NET Standard 2.1</a>. For an interactive table, see <a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions</a>.</p> </section> </div> <h3 id="which-net-standard-version-to-target">Which .NET Standard version to target</h3> <p>If you're targeting .NET Standard, we recommend you target .NET Standard 2.0, unless you need to support an earlier version. Most general-purpose libraries should not need APIs outside of .NET Standard 2.0, and .NET Framework doesn't support .NET Standard 2.1. .NET Standard 2.0 is supported by all modern platforms and is the recommended way to support multiple platforms with one target.</p> <p>If you need to support .NET Standard 1.x, we recommend that you <em>also</em> target .NET Standard 2.0. .NET Standard 1.x is distributed as a granular set of NuGet packages, which creates a large package dependency graph and results in a lot of packages being downloaded when the project is built. For more information, see <a href="library-guidance/cross-platform-targeting" data-linktype="relative-path">Cross-platform targeting</a> and <a href="#net-5-and-net-standard" data-linktype="self-bookmark">.NET 5+ and .NET Standard</a> later in this article.</p> <div class="NOTE"> <p>Note</p> <p>Starting in .NET 9, a build warning is emitted if your project targets .NET Standard 1.x. For more information, see <a href="../core/compatibility/sdk/9.0/netstandard-warning" data-linktype="relative-path">Warning emitted for .NET Standard 1.x targets</a>.</p> </div> <h3 id="net-standard-versioning-rules">.NET Standard versioning rules</h3> <p>There are two primary versioning rules:</p> <ul> <li>Additive: .NET Standard versions are logically concentric circles: higher versions incorporate all APIs from previous versions. There are no breaking changes between versions.</li> <li>Immutable: Once shipped, .NET Standard versions are frozen.</li> </ul> <p>There will be no new .NET Standard versions after 2.1. For more information, see <a href="#net-5-and-net-standard" data-linktype="self-bookmark">.NET 5+ and .NET Standard</a> later in this article.</p> <h2 id="specification">Specification</h2> <p>The .NET Standard specification is a standardized set of APIs. The specification is maintained by .NET implementers, specifically Microsoft (includes .NET Framework, .NET Core, and Mono) and Unity.</p> <h3 id="official-artifacts">Official artifacts</h3> <p>The official specification is a set of <em>.cs</em> files that define the APIs that are part of the standard. The <a href="https://github.com/dotnet/standard/tree/v2.1.0/src/netstandard/ref" data-linktype="external">ref directory</a> in the (now archived) <a href="https://github.com/dotnet/standard" data-linktype="external">dotnet/standard repository</a> defines the .NET Standard APIs.</p> <p>The <a href="https://www.nuget.org/packages/NETStandard.Library" data-linktype="external">NETStandard.Library</a> metapackage (<a href="https://github.com/dotnet/standard/blob/v2.1.0/src/netstandard/pkg/NETStandard.Library.dependencies.props" data-linktype="external">source</a>) describes the set of libraries that define (in part) one or more .NET Standard versions.</p> <p>A given component, like <code>System.Runtime</code>, describes:</p> <ul> <li>Part of .NET Standard (just its scope).</li> <li>Multiple versions of .NET Standard, for that scope.</li> </ul> <p>Derivative artifacts are provided to enable more convenient reading and to enable certain developer scenarios (for example, using a compiler).</p> <ul> <li><a href="https://github.com/dotnet/standard/tree/v2.1.0/docs/versions" data-linktype="external">API list in markdown</a>.</li> <li>Reference assemblies, distributed as NuGet packages and referenced by the <a href="https://www.nuget.org/packages/NETStandard.Library/" data-linktype="external">NETStandard.Library</a> metapackage.</li> </ul> <h3 id="package-representation">Package representation</h3> <p>The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. Implementations are delivered in a variety of ways, appropriate for each .NET implementation.</p> <p>NuGet packages target one or more <a href="frameworks" data-linktype="relative-path">frameworks</a>. .NET Standard packages target the ".NET Standard" framework. You can target the .NET Standard framework using the <code>netstandard</code> <a href="frameworks" data-linktype="relative-path">compact target framework moniker (TFM)</a>, for example, <code>netstandard1.4</code>. Libraries that are intended to run on multiple implementations of .NET should target the .NET Standard framework. For the broadest set of APIs, target <code>netstandard2.0</code>, because the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.</p> <p>The <a href="https://www.nuget.org/packages/NETStandard.Library/" data-linktype="external"><code>NETStandard.Library</code></a> metapackage references the complete set of NuGet packages that define .NET Standard. The most common way to target <code>netstandard</code> is by referencing this metapackage. It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. You can reference additional packages that target <code>netstandard</code> to get access to additional APIs.</p> <h3 id="versioning">Versioning</h3> <p>The specification is not singular, but a linearly versioned set of APIs. The first version of the standard establishes a baseline set of APIs. Subsequent versions add APIs and inherit APIs defined by previous versions. There is no established provision for removing APIs from the Standard.</p> <p>.NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those implementations.</p> <p>As noted earlier, there will be no new .NET Standard versions after 2.1.</p> <h2 id="target-net-standard">Target .NET Standard</h2> <p>You can <a href="../core/tutorials/libraries" data-linktype="relative-path">build .NET Standard Libraries</a> using a combination of the <code>netstandard</code> framework and the <code>NETStandard.Library</code> metapackage.</p> <h2 id="net-framework-compatibility-mode">.NET Framework compatibility mode</h2> <p>Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. This compatibility mode allows .NET Standard projects to reference .NET Framework libraries as if they were compiled for .NET Standard. Referencing .NET Framework libraries doesn't work for all projects, such as libraries that use Windows Presentation Foundation (WPF) APIs.</p> <p>For more information, see <a href="../core/porting/third-party-deps#net-framework-compatibility-mode" data-linktype="relative-path">.NET Framework compatibility mode</a>.</p> <h2 id="net-standard-libraries-and-visual-studio">.NET Standard libraries and Visual Studio</h2> <p>To build .NET Standard libraries in Visual Studio, make sure you have <a href="https://visualstudio.microsoft.com/downloads/?utm_medium=microsoft&amp;utm_source=learn.microsoft.com&amp;utm_campaign=inline+link&amp;utm_content=download+vs2022" data-linktype="external">Visual Studio 2022</a>, <a href="https://visualstudio.microsoft.com/downloads/?utm_medium=microsoft&amp;utm_source=learn.microsoft.com&amp;utm_campaign=inline+link&amp;utm_content=download+vs2019" data-linktype="external">Visual Studio 2019</a>, or Visual Studio 2017 version 15.3 or later installed on Windows.</p> <p>If you only need to consume .NET Standard 2.0 libraries in your projects, you can also do that in Visual Studio 2015. However, you need NuGet client 3.6 or higher installed. You can download the NuGet client for Visual Studio 2015 from the <a href="https://www.nuget.org/downloads" data-linktype="external">NuGet downloads</a> page.</p> <h2 id="net-5-and-net-standard">.NET 5+ and .NET Standard</h2> <p>.NET 5, .NET 6, .NET 7, .NET 8, and .NET 9 are single products with a uniform set of capabilities and APIs that can be used for Windows desktop apps and cross-platform console apps, cloud services, and websites. The .NET 9 <a href="frameworks" data-linktype="relative-path">TFMs</a>, for example, reflect this broad range of scenarios:</p> <ul> <li><p><code>net9.0</code></p> <p>This TFM is for code that runs everywhere. With a few exceptions, it includes only technologies that work cross-platform. For .NET 9 code, <code>net9.0</code> replaces both <code>netcoreapp</code> and <code>netstandard</code> TFMs.</p> </li> <li><p><code>net9.0-windows</code></p> <p>This is an example of an <a href="frameworks#net-5-os-specific-tfms" data-linktype="relative-path">OS-specific TFM</a> that adds OS-specific functionality to everything that <code>net9.0</code> refers to.</p> </li> </ul> <h3 id="when-to-target-netx0-vs-netstandard">When to target <code>netx.0</code> vs. <code>netstandard</code></h3> <p>For existing code that targets .NET Standard 2.0 or later, there's no need to change the TFM to <code>net8.0</code> or a later TFM. .NET 8 and .NET 9 implement .NET Standard 2.1 and earlier. The only reason to retarget from .NET Standard to .NET 8+ would be to gain access to more runtime features, language features, or APIs. For example, to use C# 9, you need to target .NET 5 or a later version. You can multitarget .NET and .NET Standard to get access to newer features and still have your library available to other .NET implementations.</p> <div class="NOTE"> <p>Note</p> <p>If your project targets .NET Standard 1.x, we recommend you retarget it to .NET Standard 2.0 or .NET 8+. For more information, see <a href="../core/compatibility/sdk/9.0/netstandard-warning" data-linktype="relative-path">Warning emitted for .NET Standard 1.x targets</a>.</p> </div> <p>Here are some guidelines for new code for .NET 5+:</p> <ul> <li><p>App components</p> <p>If you're using libraries to break down an application into several components, we recommend you target <code>net9.0</code>. For simplicity, it's best to keep all projects that make up your application on the same version of .NET. Then you can assume the same BCL features everywhere.</p> </li> <li><p>Reusable libraries</p> <p>If you're building reusable libraries that you plan to ship on NuGet, consider the trade-off between reach and available feature set. .NET Standard 2.0 is the latest version that's supported by .NET Framework, so it gives good reach with a fairly large feature set. We don't recommend targeting .NET Standard 1.x, as you'd limit the available feature set for a minimal increase in reach.</p> <p>If you don't need to support .NET Framework, you could target .NET Standard 2.1 or .NET 9. We recommend you skip .NET Standard 2.1 and go straight to .NET 9. Most widely used libraries multi-target for both .NET Standard 2.0 and .NET 5+. Supporting .NET Standard 2.0 gives you the most reach, while supporting .NET 5+ ensures you can leverage the latest platform features for customers that are already on .NET 5+.</p> </li> </ul> <h3 id="net-standard-problems">.NET Standard problems</h3> <p>Here are some problems with .NET Standard that help explain why .NET 5 and later versions are the better way to share code across platforms and workloads:</p> <ul> <li><p>Slowness to add new APIs</p> <p>.NET Standard was created as an API set that all .NET implementations would have to support, so there was a review process for proposals to add new APIs. The goal was to standardize only APIs that could be implemented in all current and future .NET platforms. The result was that if a feature missed a particular release, you might have to wait for a couple of years before it got added to a version of the Standard. Then you'd wait even longer for the new version of .NET Standard to be widely supported.</p> <p><strong>Solution in .NET 5+:</strong> When a feature is implemented, it's already available for every .NET 5+ app and library because the code base is shared. And since there's no difference between the API specification and its implementation, you're able to take advantage of new features much quicker than with .NET Standard.</p> </li> <li><p>Complex versioning</p> <p>The separation of the API specification from its implementations results in complex mapping between API specification versions and implementation versions. This complexity is evident in the table shown earlier in this article and the instructions for how to interpret it.</p> <p><strong>Solution in .NET 5+:</strong> There's no separation between a .NET 5+ API specification and its implementation. The result is a simplified TFM scheme. There's one TFM prefix for all workloads: <code>net9.0</code> is used for libraries, console apps, and web apps. The only variation is a <a href="frameworks#net-5-os-specific-tfms" data-linktype="relative-path">suffix that specifies platform-specific APIs</a> for a particular platform, such as <code>net9.0-windows</code>. Thanks to this TFM naming convention, you can easily tell whether a given app can use a given library. No version number equivalents table, like the one for .NET Standard, is needed.</p> </li> <li><p>Platform-unsupported exceptions at run time</p> <p>.NET Standard exposes platform-specific APIs. Your code might compile without errors and appear to be portable to any platform even if it isn't portable. When it runs on a platform that doesn't have an implementation for a given API, you get run-time errors.</p> <p><strong>Solution in .NET 5+:</strong> The .NET 5+ SDKs include code analyzers that are enabled by default. The platform compatibility analyzer detects unintentional use of APIs that aren't supported on the platforms you intend to run on. For more information, see <a href="analyzers/platform-compat-analyzer" data-linktype="relative-path">Platform compatibility analyzer</a>.</p> </li> </ul> <h3 id="net-standard-not-deprecated">.NET Standard not deprecated</h3> <p>.NET Standard is still needed for libraries that can be used by multiple .NET implementations. We recommend you target .NET Standard in the following scenarios:</p> <ul> <li>Use <code>netstandard2.0</code> to share code between .NET Framework and all other implementations of .NET.</li> <li>Use <code>netstandard2.1</code> to share code between Mono, Xamarin, and .NET Core 3.x.</li> </ul> <h2 id="see-also">See also</h2> <ul> <li><a href="https://github.com/dotnet/standard/blob/v2.1.0/docs/versions.md" data-linktype="external">.NET Standard versions (source)</a></li> <li><a href="https://dotnet.microsoft.com/platform/dotnet-standard#versions" data-linktype="external">.NET Standard versions (interactive UI)</a></li> <li><a href="../core/tutorials/library-with-visual-studio" data-linktype="relative-path">Build a .NET Standard library</a></li> <li><a href="library-guidance/cross-platform-targeting" data-linktype="relative-path">Cross-platform targeting</a></li> </ul> </div><div id="ms--inline-notifications" class="margin-block-xs" data-bi-name="inline-notification"></div><div id="assertive-live-region" role="alert" aria-live="assertive" class="visually-hidden" aria-relevant="additions" aria-atomic="true"></div> <div id="polite-live-region" role="status" aria-live="polite" class="visually-hidden" aria-relevant="additions" aria-atomic="true"></div> <!-- </content> --> </main><!-- recommendations section --><!-- end recommendations section --> <!-- feedback section --><section class="feedback-section position-relative margin-top-lg border border-radius padding-xxs" data-bi-name="open-source-feedback-section" data-open-source-feedback-section hidden> <div class="display-flex flex-direction-column flex-direction-row-tablet"> <div class="width-450-tablet padding-inline-xs padding-inline-xs-tablet padding-top-xs padding-bottom-sm padding-top-xs-tablet background-color-body-medium"> <div class="display-flex flex-direction-column"> <div class="padding-bottom-xxs"> <span class="icon margin-right-xxs" aria-hidden="true"> <span class="docon docon-brand-github"></span> </span> <span class="font-weight-semibold" >Collaborate with us on GitHub</span> </div> <span class="line-height-normal"> The source for this content can be found on GitHub, where you can also create and review issues and pull requests. For more information, see <a href="https://learn.microsoft.com/contribute/content/dotnet/dotnet-contribute">our contributor guide</a>. </span> </div> </div> <div class="display-flex gap-xs width-full-tablet flex-direction-column padding-xs justify-content-space-evenly"> <div class="media"><div class="media-left"> <div class="image image-36x36" hidden data-open-source-image-container> <img class="theme-display is-light" src="https://learn.microsoft.com/media/logos/logo_net.svg" aria-hidden="true" data-open-source-image-light/> <img class="theme-display is-dark is-high-contrast" src="https://learn.microsoft.com/media/logos/logo_net.svg" aria-hidden="true" data-open-source-image-dark/> </div> </div> <div class="media-content"> <p class="font-size-xl font-weight-semibold margin-bottom-xxs" data-open-source-product-title>.NET</p> <div class="display-flex gap-xs flex-direction-column"> <p class="line-height-normal" data-open-source-product-description></p> <div class="display-flex gap-xs flex-direction-column"> <a href="" data-github-link> <span class="icon margin-right-xxs" aria-hidden="true"> <span class="docon docon-bug"></span> </span> <span>Open a documentation issue</span> </a> <a href="https://aka.ms/feedback/report?space=61" class="display-block margin-top-auto font-size-md" data-feedback-product-url> <span class="icon margin-right-xxs" aria-hidden="true"> <span class="docon docon-feedback"></span> </span> <span>Provide product feedback</span> </a> </div> </div> </div> </div> </div> </div> </section><!-- end feedback section --> <!-- feedback report section --><!-- end feedback report section --><aside id="ms--additional-resources-mobile" aria-label="Additional resources" class="display-none-desktop display-none-print" > <hr class="hr" hidden /> <h2 id="ms--additional-resources-mobile-heading" class="title is-3" hidden>Additional resources</h2> <section id="right-rail-recommendations-mobile" data-bi-name="recommendations" hidden></section> <section id="right-rail-training-mobile" data-bi-name="learning-resources-card" hidden></section> <section id="right-rail-events-mobile" data-bi-name="events-card" hidden></section> <section id="right-rail-qna-mobile" data-bi-name="qna-link-card" hidden></section> </aside><div class="border-top is-visible-interactive has-default-focus margin-top-sm "><footer id="footer-interactive" data-bi-name="footer" class="footer-layout"><div class="display-flex gap-xs flex-wrap-wrap is-full-height padding-right-lg-desktop"><a data-mscc-ic="false" class="locale-selector-link button button-sm button-clear flex-shrink-0" href="#" data-bi-name="select-locale"> <span class="icon" aria-hidden="true"> <span class="docon docon-world"></span> </span> <span class="local-selector-link-text"></span></a><div class="ccpa-privacy-link" data-ccpa-privacy-link hidden> <a href="https://aka.ms/yourcaliforniaprivacychoices" class="button button-sm button-clear flex-shrink-0" data-mscc-ic="false" data-bi-name="your-privacy-choices" > <svg role="img" aria-label="California Consumer Privacy Act (CCPA) Opt-Out Icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43" focusable="false" > <title>California Consumer Privacy Act (CCPA) Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"></path> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"></path> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"></path> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"></path> </svg> <span>Your Privacy Choices</span> </a> </div> <div class="flex-shrink-0"> <div class="dropdown has-caret-up"> <button class="dropdown-trigger button button-clear button-sm has-inner-focus theme-dropdown-trigger" aria-controls="theme-menu-interactive" aria-expanded="false" title="Theme" data-bi-name="theme"> <span class="icon"> <span class="docon docon-sun" aria-hidden="true"></span> </span> <span>Theme</span> <span class="icon expanded-indicator" aria-hidden="true"> <span class="docon docon-chevron-down-light"></span> </span> </button> <div class="dropdown-menu" id="theme-menu-interactive" role="menu"> <ul class="theme-selector padding-xxs" role="none"> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="light"> <span class="theme-light margin-right-xxs"> <span class="theme-selector-icon border display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Light</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="dark"> <span class="theme-dark margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Dark</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="high-contrast"> <span class="theme-high-contrast margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>High contrast</span> </button> </li> </ul> </div> </div> </div> </div> <ul class="links" data-bi-name="footerlinks"> <li class="manage-cookies-holder" hidden></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/previous-versions/" data-bi-name="archivelink">Previous Versions</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="https://techcommunity.microsoft.com/t5/microsoft-learn-blog/bg-p/MicrosoftLearnBlog" data-bi-name="bloglink">Blog</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/contribute/" data-bi-name="contributorGuide">Contribute</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-bi-name="privacy">Privacy</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/legal/termsofuse" data-bi-name="termsofuse">Terms of Use</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://www.microsoft.com/legal/intellectualproperty/Trademarks/" data-bi-name="trademarks">Trademarks</a></li><li>&copy; Microsoft 2024</li> </ul> </footer></div></div><div id="ms--additional-resources" class="right-container column is-4-desktop display-none display-block-desktop" data-bi-name="pageactions" role="complementary" aria-label="Additional resources" > <div id="affixed-right-container" class="margin-top-sm-tablet" data-bi-name="right-column"> <h2 id="ms--additional-resources-heading" class="title is-6 margin-top-md" hidden>Additional resources</h2> <section id="right-rail-events" data-bi-name="events-card" hidden></section> <section id="right-rail-training" data-bi-name="learning-resources-card" hidden></section> <section id="right-rail-recommendations" data-bi-name="recommendations" hidden></section> <nav id="side-doc-outline" class="doc-outline" data-bi-name="intopic toc" aria-label="In this article"> <h3>In this article</h3> </nav> <section id="right-rail-qna" class="margin-top-xxs" data-bi-name="qna-link-card" hidden></section> </div> </div></div> <!--end of div.columns --> </section> <!--end of .primary-holder --> <!-- interactive container --> <aside id="interactive-container" class="interactive-container is-visible-interactive column has-body-background-dark "> </aside> <!-- end of interactive container --> </div> </div> <!--end of .mainContainer --> <section class="border-top has-default-focus is-hidden-interactive margin-top-sm "><footer id="footer" data-bi-name="footer" class="footer-layout uhf-container has-padding" role="contentinfo"><div class="display-flex gap-xs flex-wrap-wrap is-full-height padding-right-lg-desktop"><a data-mscc-ic="false" class="locale-selector-link button button-sm button-clear flex-shrink-0" href="#" data-bi-name="select-locale"> <span class="icon" aria-hidden="true"> <span class="docon docon-world"></span> </span> <span class="local-selector-link-text"></span></a><div class="ccpa-privacy-link" data-ccpa-privacy-link hidden> <a href="https://aka.ms/yourcaliforniaprivacychoices" class="button button-sm button-clear flex-shrink-0" data-mscc-ic="false" data-bi-name="your-privacy-choices" > <svg role="img" aria-label="California Consumer Privacy Act (CCPA) Opt-Out Icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43" focusable="false" > <title>California Consumer Privacy Act (CCPA) Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"></path> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"></path> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"></path> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"></path> </svg> <span>Your Privacy Choices</span> </a> </div> <div class="flex-shrink-0"> <div class="dropdown has-caret-up"> <button class="dropdown-trigger button button-clear button-sm has-inner-focus theme-dropdown-trigger" aria-controls="theme-menu" aria-expanded="false" title="Theme" data-bi-name="theme"> <span class="icon"> <span class="docon docon-sun" aria-hidden="true"></span> </span> <span>Theme</span> <span class="icon expanded-indicator" aria-hidden="true"> <span class="docon docon-chevron-down-light"></span> </span> </button> <div class="dropdown-menu" id="theme-menu" role="menu"> <ul class="theme-selector padding-xxs" role="none"> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="light"> <span class="theme-light margin-right-xxs"> <span class="theme-selector-icon border display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Light</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="dark"> <span class="theme-dark margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>Dark</span> </button> </li> <li class="theme display-block" role="menuitem"> <button class="button button-clear button-sm theme-control button-block justify-content-flex-start" data-theme-to="high-contrast"> <span class="theme-high-contrast margin-right-xxs"> <span class="border theme-selector-icon display-inline-block has-body-background" aria-hidden="true"> <svg class="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 14"> <rect width="22" height="14" class="has-fill-body-background" /> <rect x="5" y="5" width="12" height="4" class="has-fill-secondary" /> <rect x="5" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="8" y="2" width="2" height="1" class="has-fill-secondary" /> <rect x="11" y="2" width="3" height="1" class="has-fill-secondary" /> <rect x="1" y="1" width="2" height="2" class="has-fill-secondary" /> <rect x="5" y="10" width="7" height="2" rx="0.3" class="has-fill-primary" /> <rect x="19" y="1" width="2" height="2" rx="1" class="has-fill-secondary" /> </svg> </span> </span> <span>High contrast</span> </button> </li> </ul> </div> </div> </div> </div> <ul class="links" data-bi-name="footerlinks"> <li class="manage-cookies-holder" hidden></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/previous-versions/" data-bi-name="archivelink">Previous Versions</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="https://techcommunity.microsoft.com/t5/microsoft-learn-blog/bg-p/MicrosoftLearnBlog" data-bi-name="bloglink">Blog</a></li> <li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/contribute/" data-bi-name="contributorGuide">Contribute</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-bi-name="privacy">Privacy</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="/en-us/legal/termsofuse" data-bi-name="termsofuse">Terms of Use</a></li><li><a class="external-link-indicator" data-mscc-ic="false" href="https://www.microsoft.com/legal/intellectualproperty/Trademarks/" data-bi-name="trademarks">Trademarks</a></li><li>&copy; Microsoft 2024</li> </ul> </footer> </section> <div id="action-panel" role="region" aria-label="Action Panel" class="action-panel has-default-focus" tabindex="-1"></div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10