CINXE.COM

Home - Microsoft for Developers

<!DOCTYPE html> <html lang="en-US" theme="light"> <head> <meta charset="UTF-8"> <script> // Initialize theme from localStorage or system preference let theme = localStorage.getItem('theme') || (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); document.documentElement.setAttribute('theme', theme); const metaTag = document.createElement('meta'); metaTag.setAttribute('name', 'awa-ver'); metaTag.content = theme; document.head.appendChild(metaTag); isDarkTheme = theme === 'dark'; </script> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="awa-pageType" content="front-page" /> <meta name="awa-product" content="Microsoft for Developers" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>Home - Microsoft for Developers</title> <meta name="mobile-web-app-capable" content="yes"> <meta name="color-scheme" content="dark light"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-title" content="Microsoft for Developers - Empowering every developer with trusted Microsoft insights"> <link rel="profile" href="http://gmpg.org/xfn/11"> <link rel="pingback" href="https://devblogs.microsoft.com/xmlrpc.php"> <!-- [Begin] JSLL SHIM (1DS) domain prefetch --> <link rel="preconnect" href="//js.monitor.azure.com" crossorigin> <link rel="preconnect" href="//browser.events.data.microsoft.com" crossorigin> <!-- [END] JSLL SHIM (1DS) domain prefetch --> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <!-- This site is optimized with the Yoast SEO Premium plugin v23.5 (Yoast SEO v23.8) - https://yoast.com/wordpress/plugins/seo/ --> <link rel="canonical" href="https://devblogs.microsoft.com/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="website" /> <meta property="og:title" content="Home" /> <meta property="og:url" content="https://devblogs.microsoft.com/" /> <meta property="og:site_name" content="Microsoft for Developers" /> <meta property="article:modified_time" content="2024-11-07T19:29:26+00:00" /> <meta property="og:image" content="https://devblogs.microsoft.com/wp-content/uploads/2022/01/DEVBLOGS_social.png" /> <meta property="og:image:width" content="2400" /> <meta property="og:image:height" content="1260" /> <meta property="og:image:type" content="image/png" /> <meta name="twitter:card" content="summary_large_image" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://devblogs.microsoft.com/","url":"https://devblogs.microsoft.com/","name":"Home - Microsoft for Developers","isPartOf":{"@id":"https://devblogs.microsoft.com/#website"},"primaryImageOfPage":{"@id":"https://devblogs.microsoft.com/#primaryimage"},"image":{"@id":"https://devblogs.microsoft.com/#primaryimage"},"thumbnailUrl":"https://devblogs.microsoft.com/wp-content/uploads/2024/11/blog-featured.webp","datePublished":"2018-08-08T20:06:42+00:00","dateModified":"2024-11-07T19:29:26+00:00","breadcrumb":{"@id":"https://devblogs.microsoft.com/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://devblogs.microsoft.com/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://devblogs.microsoft.com/#primaryimage","url":"https://devblogs.microsoft.com/wp-content/uploads/2024/11/blog-featured.webp","contentUrl":"https://devblogs.microsoft.com/wp-content/uploads/2024/11/blog-featured.webp","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https://devblogs.microsoft.com/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://devblogs.microsoft.com/#website","url":"https://devblogs.microsoft.com/","name":"Microsoft for Developers","description":"Empowering every developer with trusted Microsoft insights","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://devblogs.microsoft.com/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}</script> <!-- / Yoast SEO Premium plugin. --> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/devblogs.microsoft.com\/wp-includes\/js\/wp-emoji-release.min.js"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://devblogs.microsoft.com/wp-includes/css/dist/block-library/style.min.css' type='text/css' media='all' /> <style id='safe-svg-svg-icon-style-inline-css' type='text/css'> .safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{height:100%;max-height:100%;max-width:100%;width:100%} </style> <link rel='stylesheet' id='mpp_gutenberg-css' href='https://devblogs.microsoft.com/wp-content/plugins/metronet-profile-picture/dist/blocks.style.build.css?ver=2.6.3' type='text/css' media='all' /> <link rel='stylesheet' id='devblogs-evo-styles-css' href='https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/css/theme.min.css?ver=1.2.0.1732556449' type='text/css' media='all' /> <link rel='stylesheet' id='newsletter-css' href='https://devblogs.microsoft.com/wp-content/plugins/newsletter/style.css?ver=8.6.2' type='text/css' media='all' /> <link rel='stylesheet' id='fabric-icons-css' href='https://devblogs.microsoft.com/wp-content/plugins/fabric-icon-manager/assets/css/fabric-icons.css?ver=1699358813' type='text/css' media='all' /> <link rel='stylesheet' id='wp-featherlight-css' href='https://devblogs.microsoft.com/wp-content/plugins/wp-featherlight/css/wp-featherlight.min.css?ver=1.3.4' type='text/css' media='all' /> <link rel='stylesheet' id='block-custom-css' href='https://devblogs.microsoft.com/wp-content/plugins/devblogs-blocks/assets/block-custom.css' type='text/css' media='all' /> <link rel='stylesheet' id='highlight-css-css' href='https://devblogs.microsoft.com/wp-content/plugins/devblogs-blocks/assets/highlight.css' type='text/css' media='all' /> <script type="text/javascript"> window._nslDOMReady = function (callback) { if ( document.readyState === "complete" || document.readyState === "interactive" ) { callback(); } else { document.addEventListener( "DOMContentLoaded", callback ); } }; </script><script type="text/javascript" src="https://devblogs.microsoft.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/back-to-top.min.js?ver=1725380830" id="back-to-top-script-js"></script> <link rel="https://api.w.org/" href="https://devblogs.microsoft.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://devblogs.microsoft.com/wp-json/wp/v2/pages/3155" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://devblogs.microsoft.com/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://devblogs.microsoft.com/' /> <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://devblogs.microsoft.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdevblogs.microsoft.com%2F" /> <link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://devblogs.microsoft.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fdevblogs.microsoft.com%2F&#038;format=xml" /> <script type="text/javascript"> (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1; t.src="https://www.clarity.ms/tag/"+i+"?ref=wordpress";y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "jmy8eheejj"); </script> <style>#respond h3#reply-title{display:none;}</style><link rel="icon" href="https://devblogs.microsoft.com/wp-content/uploads/2024/10/Microsoft-favicon-48x48.jpg" sizes="32x32" /> <link rel="icon" href="https://devblogs.microsoft.com/wp-content/uploads/2024/10/Microsoft-favicon-300x300.jpg" sizes="192x192" /> <link rel="apple-touch-icon" href="https://devblogs.microsoft.com/wp-content/uploads/2024/10/Microsoft-favicon-300x300.jpg" /> <meta name="msapplication-TileImage" content="https://devblogs.microsoft.com/wp-content/uploads/2024/10/Microsoft-favicon-300x300.jpg" /> <style type="text/css">div.nsl-container[data-align="left"] { text-align: left; } div.nsl-container[data-align="center"] { text-align: center; } div.nsl-container[data-align="right"] { text-align: right; } div.nsl-container div.nsl-container-buttons a[data-plugin="nsl"] { text-decoration: none; box-shadow: none; border: 0; } div.nsl-container .nsl-container-buttons { display: flex; padding: 5px 0; } div.nsl-container.nsl-container-block .nsl-container-buttons { display: inline-grid; grid-template-columns: minmax(145px, auto); } div.nsl-container-block-fullwidth .nsl-container-buttons { flex-flow: column; align-items: center; } div.nsl-container-block-fullwidth .nsl-container-buttons a, div.nsl-container-block .nsl-container-buttons a { flex: 1 1 auto; display: block; margin: 5px 0; width: 100%; } div.nsl-container-inline { margin: -5px; text-align: left; } div.nsl-container-inline .nsl-container-buttons { justify-content: center; flex-wrap: wrap; } div.nsl-container-inline .nsl-container-buttons a { margin: 5px; display: inline-block; } div.nsl-container-grid .nsl-container-buttons { flex-flow: row; align-items: center; flex-wrap: wrap; } div.nsl-container-grid .nsl-container-buttons a { flex: 1 1 auto; display: block; margin: 5px; max-width: 280px; width: 100%; } @media only screen and (min-width: 650px) { div.nsl-container-grid .nsl-container-buttons a { width: auto; } } div.nsl-container .nsl-button { cursor: pointer; vertical-align: top; border-radius: 4px; } div.nsl-container .nsl-button-default { color: #fff; display: flex; } div.nsl-container .nsl-button-icon { display: inline-block; } div.nsl-container .nsl-button-svg-container { flex: 0 0 auto; padding: 8px; display: flex; align-items: center; } div.nsl-container svg { height: 24px; width: 24px; vertical-align: top; } div.nsl-container .nsl-button-default div.nsl-button-label-container { margin: 0 24px 0 12px; padding: 10px 0; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 20px; letter-spacing: .25px; overflow: hidden; text-align: center; text-overflow: clip; white-space: nowrap; flex: 1 1 auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-transform: none; display: inline-block; } div.nsl-container .nsl-button-google[data-skin="dark"] .nsl-button-svg-container { margin: 1px; padding: 7px; border-radius: 3px; background: #fff; } div.nsl-container .nsl-button-google[data-skin="light"] { border-radius: 1px; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .25); color: RGBA(0, 0, 0, 0.54); } div.nsl-container .nsl-button-apple .nsl-button-svg-container { padding: 0 6px; } div.nsl-container .nsl-button-apple .nsl-button-svg-container svg { height: 40px; width: auto; } div.nsl-container .nsl-button-apple[data-skin="light"] { color: #000; box-shadow: 0 0 0 1px #000; } div.nsl-container .nsl-button-facebook[data-skin="white"] { color: #000; box-shadow: inset 0 0 0 1px #000; } div.nsl-container .nsl-button-facebook[data-skin="light"] { color: #1877F2; box-shadow: inset 0 0 0 1px #1877F2; } div.nsl-container .nsl-button-spotify[data-skin="white"] { color: #191414; box-shadow: inset 0 0 0 1px #191414; } div.nsl-container .nsl-button-apple div.nsl-button-label-container { font-size: 17px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } div.nsl-container .nsl-button-slack div.nsl-button-label-container { font-size: 17px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } div.nsl-container .nsl-button-slack[data-skin="light"] { color: #000000; box-shadow: inset 0 0 0 1px #DDDDDD; } div.nsl-container .nsl-button-tiktok[data-skin="light"] { color: #161823; box-shadow: 0 0 0 1px rgba(22, 24, 35, 0.12); } div.nsl-container .nsl-button-kakao { color: rgba(0, 0, 0, 0.85); } .nsl-clear { clear: both; } .nsl-container { clear: both; } .nsl-disabled-provider .nsl-button { filter: grayscale(1); opacity: 0.8; } /*Button align start*/ div.nsl-container-inline[data-align="left"] .nsl-container-buttons { justify-content: flex-start; } div.nsl-container-inline[data-align="center"] .nsl-container-buttons { justify-content: center; } div.nsl-container-inline[data-align="right"] .nsl-container-buttons { justify-content: flex-end; } div.nsl-container-grid[data-align="left"] .nsl-container-buttons { justify-content: flex-start; } div.nsl-container-grid[data-align="center"] .nsl-container-buttons { justify-content: center; } div.nsl-container-grid[data-align="right"] .nsl-container-buttons { justify-content: flex-end; } div.nsl-container-grid[data-align="space-around"] .nsl-container-buttons { justify-content: space-around; } div.nsl-container-grid[data-align="space-between"] .nsl-container-buttons { justify-content: space-between; } /* Button align end*/ /* Redirect */ #nsl-redirect-overlay { display: flex; flex-direction: column; justify-content: center; align-items: center; position: fixed; z-index: 1000000; left: 0; top: 0; width: 100%; height: 100%; backdrop-filter: blur(1px); background-color: RGBA(0, 0, 0, .32);; } #nsl-redirect-overlay-container { display: flex; flex-direction: column; justify-content: center; align-items: center; background-color: white; padding: 30px; border-radius: 10px; } #nsl-redirect-overlay-spinner { content: ''; display: block; margin: 20px; border: 9px solid RGBA(0, 0, 0, .6); border-top: 9px solid #fff; border-radius: 50%; box-shadow: inset 0 0 0 1px RGBA(0, 0, 0, .6), 0 0 0 1px RGBA(0, 0, 0, .6); width: 40px; height: 40px; animation: nsl-loader-spin 2s linear infinite; } @keyframes nsl-loader-spin { 0% { transform: rotate(0deg) } to { transform: rotate(360deg) } } #nsl-redirect-overlay-title { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 18px; font-weight: bold; color: #3C434A; } #nsl-redirect-overlay-text { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; text-align: center; font-size: 14px; color: #3C434A; } /* Redirect END*/</style><style type="text/css">/* Notice fallback */ #nsl-notices-fallback { position: fixed; right: 10px; top: 10px; z-index: 10000; } .admin-bar #nsl-notices-fallback { top: 42px; } #nsl-notices-fallback > div { position: relative; background: #fff; border-left: 4px solid #fff; box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1); margin: 5px 15px 2px; padding: 1px 20px; } #nsl-notices-fallback > div.error { display: block; border-left-color: #dc3232; } #nsl-notices-fallback > div.updated { display: block; border-left-color: #46b450; } #nsl-notices-fallback p { margin: .5em 0; padding: 2px; } #nsl-notices-fallback > div:after { position: absolute; right: 5px; top: 5px; content: '\00d7'; display: block; height: 16px; width: 16px; line-height: 16px; text-align: center; font-size: 20px; cursor: pointer; }</style> <!-- Start JSLL SHIM(1DS) Tags --> <script src="https://js.monitor.azure.com/scripts/c/ms.jsll-3.min.js" type="text/javascript"></script> <script type="text/javascript"> var config = { useDefaultContentName: true, useShortNameForContentBlob: false, autoCapture: { pageView: true, onLoad: true, onUnload: true, lineage: true, click: true, scroll: true, resize: false, lineage: true, jsError: true, addin: true, perf: true }, urlCollectHash: true, urlCollectQuery: true, instrumentationKey: "31b03416b80d4fec81330cf396b8bf63-2db31b2d-ee29-4371-af87-871cba555f5a-7031", coreData: { appId: "MSDevBlogs", }, // Initially set the GPC_DataSharingOptIn flag property in 1DS (One Data Source) to false advancedConfig: { propertyConfiguration: { gpcDataSharingOptIn: false } }, callback: { pageName: function () { return document.title }, contentUpdatePageTags: function () { return { metaTags: { 'ver': theme }, } }, pageActionContentTags: function () { return { metaTags: { 'ver': theme }, } }, pageActionPageTags: function () { return { "pageType": "front-page", metaTags: { 'ver': theme }, } }, pageViewPageTags: function () { return { "pageType": "front-page", } }, } }; awa.init(config); </script> <!-- END JSLL SHIM(1DS) Integration --> <script> /*! lazysizes - v4.1.3 | For lazy loading images */ !function (a, b) { var c = b(a, a.document); a.lazySizes = c, "object" == typeof module && module.exports && (module.exports = c) }(window, function (a, b) { "use strict"; if (b.getElementsByClassName) { var c, d, e = b.documentElement, f = a.Date, g = a.HTMLPictureElement, h = "addEventListener", i = "getAttribute", j = a[h], k = a.setTimeout, l = a.requestAnimationFrame || k, m = a.requestIdleCallback, n = /^picture$/i, o = ["load", "error", "lazyincluded", "_lazyloaded"], p = {}, q = Array.prototype.forEach, r = function (a, b) { return p[b] || (p[b] = new RegExp("(\\s|^)" + b + "(\\s|$)")), p[b].test(a[i]("class") || "") && p[b] }, s = function (a, b) { r(a, b) || a.setAttribute("class", (a[i]("class") || "").trim() + " " + b) }, t = function (a, b) { var c; (c = r(a, b)) && a.setAttribute("class", (a[i]("class") || "").replace(c, " ")) }, u = function (a, b, c) { var d = c ? h : "removeEventListener"; c && u(a, b), o.forEach(function (c) { a[d](c, b) }) }, v = function (a, d, e, f, g) { var h = b.createEvent("Event"); return e || (e = {}), e.instance = c, h.initEvent(d, !f, !g), h.detail = e, a.dispatchEvent(h), h }, w = function (b, c) { var e; !g && (e = a.picturefill || d.pf) ? (c && c.src && !b[i]("srcset") && b.setAttribute("srcset", c.src), e({ reevaluate: !0, elements: [b] })) : c && c.src && (b.src = c.src) }, x = function (a, b) { return (getComputedStyle(a, null) || {})[b] }, y = function (a, b, c) { for (c = c || a.offsetWidth; c < d.minSize && b && !a._lazysizesWidth;)c = b.offsetWidth, b = b.parentNode; return c }, z = function () { var a, c, d = [], e = [], f = d, g = function () { var b = f; for (f = d.length ? e : d, a = !0, c = !1; b.length;)b.shift()(); a = !1 }, h = function (d, e) { a && !e ? d.apply(this, arguments) : (f.push(d), c || (c = !0, (b.hidden ? k : l)(g))) }; return h._lsFlush = g, h }(), A = function (a, b) { return b ? function () { z(a) } : function () { var b = this, c = arguments; z(function () { a.apply(b, c) }) } }, B = function (a) { var b, c = 0, e = d.throttleDelay, g = d.ricTimeout, h = function () { b = !1, c = f.now(), a() }, i = m && g > 49 ? function () { m(h, { timeout: g }), g !== d.ricTimeout && (g = d.ricTimeout) } : A(function () { k(h) }, !0); return function (a) { var d; (a = a === !0) && (g = 33), b || (b = !0, d = e - (f.now() - c), 0 > d && (d = 0), a || 9 > d ? i() : k(i, d)) } }, C = function (a) { var b, c, d = 99, e = function () { b = null, a() }, g = function () { var a = f.now() - c; d > a ? k(g, d - a) : (m || e)(e) }; return function () { c = f.now(), b || (b = k(g, d)) } }; !function () { var b, c = { lazyClass: "lazyload", loadedClass: "lazyloaded", loadingClass: "lazyloading", preloadClass: "lazypreload", errorClass: "lazyerror", autosizesClass: "lazyautosizes", srcAttr: "data-src", srcsetAttr: "data-srcset", sizesAttr: "data-sizes", minSize: 40, customMedia: {}, init: !0, expFactor: 1.5, hFac: .8, loadMode: 2, loadHidden: !0, ricTimeout: 0, throttleDelay: 125 }; d = a.lazySizesConfig || a.lazysizesConfig || {}; for (b in c) b in d || (d[b] = c[b]); a.lazySizesConfig = d, k(function () { d.init && F() }) }(); var D = function () { var g, l, m, o, p, y, D, F, G, H, I, J, K, L, M = /^img$/i, N = /^iframe$/i, O = "onscroll" in a && !/(gle|ing)bot/.test(navigator.userAgent), P = 0, Q = 0, R = 0, S = -1, T = function (a) { R--, a && a.target && u(a.target, T), (!a || 0 > R || !a.target) && (R = 0) }, U = function (a, c) { var d, f = a, g = "hidden" == x(b.body, "visibility") || "hidden" != x(a.parentNode, "visibility") && "hidden" != x(a, "visibility"); for (F -= c, I += c, G -= c, H += c; g && (f = f.offsetParent) && f != b.body && f != e;)g = (x(f, "opacity") || 1) > 0, g && "visible" != x(f, "overflow") && (d = f.getBoundingClientRect(), g = H > d.left && G < d.right && I > d.top - 1 && F < d.bottom + 1); return g }, V = function () { var a, f, h, j, k, m, n, p, q, r = c.elements; if ((o = d.loadMode) && 8 > R && (a = r.length)) { f = 0, S++, null == K && ("expand" in d || (d.expand = e.clientHeight > 500 && e.clientWidth > 500 ? 500 : 370), J = d.expand, K = J * d.expFactor), K > Q && 1 > R && S > 2 && o > 2 && !b.hidden ? (Q = K, S = 0) : Q = o > 1 && S > 1 && 6 > R ? J : P; for (; a > f; f++)if (r[f] && !r[f]._lazyRace) if (O) if ((p = r[f][i]("data-expand")) && (m = 1 * p) || (m = Q), q !== m && (y = innerWidth + m * L, D = innerHeight + m, n = -1 * m, q = m), h = r[f].getBoundingClientRect(), (I = h.bottom) >= n && (F = h.top) <= D && (H = h.right) >= n * L && (G = h.left) <= y && (I || H || G || F) && (d.loadHidden || "hidden" != x(r[f], "visibility")) && (l && 3 > R && !p && (3 > o || 4 > S) || U(r[f], m))) { if (ba(r[f]), k = !0, R > 9) break } else !k && l && !j && 4 > R && 4 > S && o > 2 && (g[0] || d.preloadAfterLoad) && (g[0] || !p && (I || H || G || F || "auto" != r[f][i](d.sizesAttr))) && (j = g[0] || r[f]); else ba(r[f]); j && !k && ba(j) } }, W = B(V), X = function (a) { s(a.target, d.loadedClass), t(a.target, d.loadingClass), u(a.target, Z), v(a.target, "lazyloaded") }, Y = A(X), Z = function (a) { Y({ target: a.target }) }, $ = function (a, b) { try { a.contentWindow.location.replace(b) } catch (c) { a.src = b } }, _ = function (a) { var b, c = a[i](d.srcsetAttr); (b = d.customMedia[a[i]("data-media") || a[i]("media")]) && a.setAttribute("media", b), c && a.setAttribute("srcset", c) }, aa = A(function (a, b, c, e, f) { var g, h, j, l, o, p; (o = v(a, "lazybeforeunveil", b)).defaultPrevented || (e && (c ? s(a, d.autosizesClass) : a.setAttribute("sizes", e)), h = a[i](d.srcsetAttr), g = a[i](d.srcAttr), f && (j = a.parentNode, l = j && n.test(j.nodeName || "")), p = b.firesLoad || "src" in a && (h || g || l), o = { target: a }, p && (u(a, T, !0), clearTimeout(m), m = k(T, 2500), s(a, d.loadingClass), u(a, Z, !0)), l && q.call(j.getElementsByTagName("source"), _), h ? a.setAttribute("srcset", h) : g && !l && (N.test(a.nodeName) ? $(a, g) : a.src = g), f && (h || l) && w(a, { src: g })), a._lazyRace && delete a._lazyRace, t(a, d.lazyClass), z(function () { (!p || a.complete && a.naturalWidth > 1) && (p ? T(o) : R--, X(o)) }, !0) }), ba = function (a) { var b, c = M.test(a.nodeName), e = c && (a[i](d.sizesAttr) || a[i]("sizes")), f = "auto" == e; (!f && l || !c || !a[i]("src") && !a.srcset || a.complete || r(a, d.errorClass) || !r(a, d.lazyClass)) && (b = v(a, "lazyunveilread").detail, f && E.updateElem(a, !0, a.offsetWidth), a._lazyRace = !0, R++, aa(a, b, f, e, c)) }, ca = function () { if (!l) { if (f.now() - p < 999) return void k(ca, 999); var a = C(function () { d.loadMode = 3, W() }); l = !0, d.loadMode = 3, W(), j("scroll", function () { 3 == d.loadMode && (d.loadMode = 2), a() }, !0) } }; return { _: function () { p = f.now(), c.elements = b.getElementsByClassName(d.lazyClass), g = b.getElementsByClassName(d.lazyClass + " " + d.preloadClass), L = d.hFac, j("scroll", W, !0), j("resize", W, !0), a.MutationObserver ? new MutationObserver(W).observe(e, { childList: !0, subtree: !0, attributes: !0 }) : (e[h]("DOMNodeInserted", W, !0), e[h]("DOMAttrModified", W, !0), setInterval(W, 999)), j("hashchange", W, !0), ["focus", "mouseover", "click", "load", "transitionend", "animationend", "webkitAnimationEnd"].forEach(function (a) { b[h](a, W, !0) }), /d$|^c/.test(b.readyState) ? ca() : (j("load", ca), b[h]("DOMContentLoaded", W), k(ca, 2e4)), c.elements.length ? (V(), z._lsFlush()) : W() }, checkElems: W, unveil: ba } }(), E = function () { var a, c = A(function (a, b, c, d) { var e, f, g; if (a._lazysizesWidth = d, d += "px", a.setAttribute("sizes", d), n.test(b.nodeName || "")) for (e = b.getElementsByTagName("source"), f = 0, g = e.length; g > f; f++)e[f].setAttribute("sizes", d); c.detail.dataAttr || w(a, c.detail) }), e = function (a, b, d) { var e, f = a.parentNode; f && (d = y(a, f, d), e = v(a, "lazybeforesizes", { width: d, dataAttr: !!b }), e.defaultPrevented || (d = e.detail.width, d && d !== a._lazysizesWidth && c(a, f, e, d))) }, f = function () { var b, c = a.length; if (c) for (b = 0; c > b; b++)e(a[b]) }, g = C(f); return { _: function () { a = b.getElementsByClassName(d.autosizesClass), j("resize", g) }, checkElems: g, updateElem: e } }(), F = function () { F.i || (F.i = !0, E._(), D._()) }; return c = { cfg: d, autoSizer: E, loader: D, init: F, uP: w, aC: s, rC: t, hC: r, fire: v, gW: y, rAF: z } } }); </script> </head> <body class="home page-template page-template-devblogs-evo-landing page-template-devblogs-evo-landing-php page page-id-3155 wp-featherlight-captions"> <!-- Star cookies banner --> <script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <div id="cookie-banner"></div> <script> let userConsentDetailsCallback = function () { return siteConsent ? siteConsent.getConsent() : null }; awa.sku.config.extensionConfig.SystemPropertiesCollector.callback.userConsentDetails = userConsentDetailsCallback awa.sku.config.extensionConfig.SystemPropertiesCollector.userConsented = false; var is_post = ''; function changeAnalyticsCookies() { //have Analytics consent if (siteConsent.getConsentFor(WcpConsent.consentCategories.Analytics)) { //set consent var date = new Date(); date.setTime(date.getTime() + (180 * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); if (window.clarity) { window.clarity('consent'); } } else if (siteConsent.isConsentRequired === false) { // Consent is not required if (window.clarity) { window.clarity('consent'); } } else { document.cookie = name + '=_gat; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; document.cookie = name + '=_gid; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; document.cookie = name + '=_ga; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; document.cookie = name + '=simaCookie; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; } } window.WcpConsent && WcpConsent.init("en-US", "cookie-banner", function (err, _siteConsent) { if (!err) { siteConsent = _siteConsent; //siteConsent is used to get the current consent } else { //console.log("Error initializing WcpConsent: "+ err); } }, onConsentChanged, WcpConsent.themes.light); changeAnalyticsCookies(); function onConsentChanged(categoryPreferences) { changeAnalyticsCookies(); } </script> <!-- end cookies banner --> <!-- UHF header --> <div id="headerArea" class="uhf" data-m='{"cN":"headerArea","cT":"Area_coreuiArea","id":"a1Body","sN":1,"aN":"Body"}'> <div id="headerRegion" data-region-key="headerregion" data-m='{"cN":"headerRegion","cT":"Region_coreui-region","id":"r1a1","sN":1,"aN":"a1"}' > <div id="headerUniversalHeader" data-m='{"cN":"headerUniversalHeader","cT":"Module_coreui-universalheader","id":"m1r1a1","sN":1,"aN":"r1a1"}' data-module-id="Category|headerRegion|coreui-region|headerUniversalHeader|coreui-universalheader"> <div data-m='{"cN":"cookiebanner_cont","cT":"Container","id":"c1m1r1a1","sN":1,"aN":"m1r1a1"}'> <div id="uhfCookieAlert" data-locale="en-us"> <div id="msccBannerV2"></div> </div> </div> <a id="uhfSkipToMain" class="m-skip-to-main" href="javascript:void(0)" data-href="#mainContent" tabindex="0" data-m='{"cN":"Skip to content_nonnav","id":"nn2m1r1a1","sN":2,"aN":"m1r1a1"}'>Skip to main content</a> <header class="c-uhfh context-uhf no-js c-sgl-stck c-category-header " itemscope="itemscope" data-header-footprint="/DEV_Blogs/DEV_header-landing, fromService: True" data-magict="true" itemtype="http://schema.org/Organization"> <div class="theme-light js-global-head f-closed global-head-cont" data-m='{"cN":"Universal Header_cont","cT":"Container","id":"c3m1r1a1","sN":3,"aN":"m1r1a1"}'> <div class="c-uhfh-gcontainer-st"> <button type="button" class="c-action-trigger c-glyph glyph-global-nav-button" aria-label="All Microsoft expand to see list of Microsoft products and services" initialState-label="All Microsoft expand to see list of Microsoft products and services" toggleState-label="Close All Microsoft list" aria-expanded="false" data-m='{"cN":"Mobile menu button_nonnav","id":"nn1c3m1r1a1","sN":1,"aN":"c3m1r1a1"}'></button> <button type="button" class="c-action-trigger c-glyph glyph-arrow-htmllegacy c-close-search" aria-label="Close search" aria-expanded="false" data-m='{"cN":"Close Search_nonnav","id":"nn2c3m1r1a1","sN":2,"aN":"c3m1r1a1"}'></button> <a id="uhfLogo" class="c-logo c-sgl-stk-uhfLogo" itemprop="url" href="https://www.microsoft.com" aria-label="Microsoft" data-m='{"cN":"GlobalNav_Logo_cont","cT":"Container","id":"c3c3m1r1a1","sN":3,"aN":"c3m1r1a1"}'> <img alt="" itemprop="logo" class="c-image" src="https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE1Mu3b?ver=5c31" role="presentation" aria-hidden="true" /> <span itemprop="name" role="presentation" aria-hidden="true">Microsoft</span> </a> <div class="f-mobile-title"> <button type="button" class="c-action-trigger c-glyph glyph-chevron-left" aria-label="See more menu options" data-m='{"cN":"Mobile back button_nonnav","id":"nn4c3m1r1a1","sN":4,"aN":"c3m1r1a1"}'></button> <span data-global-title="Microsoft home" class="js-mobile-title">Dev Blogs</span> <button type="button" class="c-action-trigger c-glyph glyph-chevron-right" aria-label="See more menu options" data-m='{"cN":"Mobile forward button_nonnav","id":"nn5c3m1r1a1","sN":5,"aN":"c3m1r1a1"}'></button> </div> <div class="c-show-pipe x-hidden-vp-mobile-st"> <a id="uhfCatLogo" class="c-logo c-cat-logo" href="/" aria-label="Dev Blogs" itemprop="url" data-m='{"cN":"CatNav_Dev Blogs_nav","id":"n6c3m1r1a1","sN":6,"aN":"c3m1r1a1"}'> <span>Dev Blogs</span> </a> </div> <div class="cat-logo-button-cont x-hidden"> <button type="button" id="uhfCatLogoButton" class="c-cat-logo-button x-hidden" aria-expanded="false" aria-label="Dev Blogs" data-m='{"cN":"Dev Blogs_nonnav","id":"nn7c3m1r1a1","sN":7,"aN":"c3m1r1a1"}'> Dev Blogs </button> </div> <nav id="uhf-g-nav" aria-label="Contextual menu" class="c-uhfh-gnav" data-m='{"cN":"Category nav_cont","cT":"Container","id":"c8c3m1r1a1","sN":8,"aN":"c3m1r1a1"}'> <ul class="js-paddle-items"> <li class="single-link js-nav-menu x-hidden-none-mobile-vp uhf-menu-item"> <a class="c-uhf-nav-link" href="/" data-m='{"cN":"CatNav_Home_nav","id":"n1c8c3m1r1a1","sN":1,"aN":"c8c3m1r1a1"}' > Home </a> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="Developer" aria-expanded="false" data-m='{"cN":"CatNav_Developer_nonnav","id":"nn2c8c3m1r1a1","sN":2,"aN":"c8c3m1r1a1"}'>Developer</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Developer_cont","cT":"Container","id":"c3c8c3m1r1a1","sN":3,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft for Developers_cont","cT":"Container","id":"c1c3c8c3m1r1a1","sN":1,"aN":"c3c8c3m1r1a1"}'> <a id="microsoft-for-developers" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/blog" data-m='{"cN":"CatNav_Microsoft for Developers_nav","id":"n1c1c3c8c3m1r1a1","sN":1,"aN":"c1c3c8c3m1r1a1"}'>Microsoft for Developers</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Visual Studio_cont","cT":"Container","id":"c2c3c8c3m1r1a1","sN":2,"aN":"c3c8c3m1r1a1"}'> <a id="visual-studio" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/" data-m='{"cN":"CatNav_Visual Studio_nav","id":"n1c2c3c8c3m1r1a1","sN":1,"aN":"c2c3c8c3m1r1a1"}'>Visual Studio</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Visual Studio Code_cont","cT":"Container","id":"c3c3c8c3m1r1a1","sN":3,"aN":"c3c8c3m1r1a1"}'> <a id="visual-studio-code" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/vscode-blog" data-m='{"cN":"CatNav_Visual Studio Code_nav","id":"n1c3c3c8c3m1r1a1","sN":1,"aN":"c3c3c8c3m1r1a1"}'>Visual Studio Code</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Develop from the cloud_cont","cT":"Container","id":"c4c3c8c3m1r1a1","sN":4,"aN":"c3c8c3m1r1a1"}'> <a id="c-shellmenu_5" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/develop-from-the-cloud/" data-m='{"cN":"CatNav_Develop from the cloud_nav","id":"n1c4c3c8c3m1r1a1","sN":1,"aN":"c4c3c8c3m1r1a1"}'>Develop from the cloud</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Visual Studio for Mac_cont","cT":"Container","id":"c5c3c8c3m1r1a1","sN":5,"aN":"c3c8c3m1r1a1"}'> <a id="visual-studio-for-mac" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/tag/visual-studio-for-mac/" data-m='{"cN":"CatNav_Visual Studio for Mac_nav","id":"n1c5c3c8c3m1r1a1","sN":1,"aN":"c5c3c8c3m1r1a1"}'>Visual Studio for Mac</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"All things Azure_cont","cT":"Container","id":"c6c3c8c3m1r1a1","sN":6,"aN":"c3c8c3m1r1a1"}'> <a id="all-things-azure-1" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/all-things-azure/" data-m='{"cN":"CatNav_All things Azure_nav","id":"n1c6c3c8c3m1r1a1","sN":1,"aN":"c6c3c8c3m1r1a1"}'>All things Azure</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"DevOps_cont","cT":"Container","id":"c7c3c8c3m1r1a1","sN":7,"aN":"c3c8c3m1r1a1"}'> <a id="devops" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/devops/" data-m='{"cN":"CatNav_DevOps_nav","id":"n1c7c3c8c3m1r1a1","sN":1,"aN":"c7c3c8c3m1r1a1"}'>DevOps</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows Developer_cont","cT":"Container","id":"c8c3c8c3m1r1a1","sN":8,"aN":"c3c8c3m1r1a1"}'> <a id="windows-developer" class="js-subm-uhf-nav-link" href="https://blogs.windows.com/windowsdeveloper/" data-m='{"cN":"CatNav_Windows Developer_nav","id":"n1c8c3c8c3m1r1a1","sN":1,"aN":"c8c3c8c3m1r1a1"}'>Windows Developer</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Developer support_cont","cT":"Container","id":"c9c3c8c3m1r1a1","sN":9,"aN":"c3c8c3m1r1a1"}'> <a id="developer-support" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/premier-developer/" data-m='{"cN":"CatNav_Developer support_nav","id":"n1c9c3c8c3m1r1a1","sN":1,"aN":"c9c3c8c3m1r1a1"}'>Developer support</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"ISE Developer_cont","cT":"Container","id":"c10c3c8c3m1r1a1","sN":10,"aN":"c3c8c3m1r1a1"}'> <a id="ise-developer" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/ise/" data-m='{"cN":"CatNav_ISE Developer_nav","id":"n1c10c3c8c3m1r1a1","sN":1,"aN":"c10c3c8c3m1r1a1"}'>ISE Developer</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Engineering@Microsoft_cont","cT":"Container","id":"c11c3c8c3m1r1a1","sN":11,"aN":"c3c8c3m1r1a1"}'> <a id="engineering-microsoft" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/engineering-at-microsoft/" data-m='{"cN":"CatNav_Engineering@Microsoft_nav","id":"n1c11c3c8c3m1r1a1","sN":1,"aN":"c11c3c8c3m1r1a1"}'>Engineering@Microsoft</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure SDK_cont","cT":"Container","id":"c12c3c8c3m1r1a1","sN":12,"aN":"c3c8c3m1r1a1"}'> <a id="Azure-sdk" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azure-sdk/" data-m='{"cN":"CatNav_Azure SDK_nav","id":"n1c12c3c8c3m1r1a1","sN":1,"aN":"c12c3c8c3m1r1a1"}'>Azure SDK</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Command Line_cont","cT":"Container","id":"c13c3c8c3m1r1a1","sN":13,"aN":"c3c8c3m1r1a1"}'> <a id="command-line" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/commandline/" data-m='{"cN":"CatNav_Command Line_nav","id":"n1c13c3c8c3m1r1a1","sN":1,"aN":"c13c3c8c3m1r1a1"}'>Command Line</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Perf and Diagnostics_cont","cT":"Container","id":"c14c3c8c3m1r1a1","sN":14,"aN":"c3c8c3m1r1a1"}'> <a id="perf-and-diagnostics" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/performance-diagnostics/" data-m='{"cN":"CatNav_Perf and Diagnostics_nav","id":"n1c14c3c8c3m1r1a1","sN":1,"aN":"c14c3c8c3m1r1a1"}'>Perf and Diagnostics</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"React Native_cont","cT":"Container","id":"c15c3c8c3m1r1a1","sN":15,"aN":"c3c8c3m1r1a1"}'> <a id="react-native" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/react-native/" data-m='{"cN":"CatNav_React Native_nav","id":"n1c15c3c8c3m1r1a1","sN":1,"aN":"c15c3c8c3m1r1a1"}'>React Native</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="Technology-main" aria-expanded="false" data-m='{"cN":"CatNav_Technology_nonnav","id":"nn4c8c3m1r1a1","sN":4,"aN":"c8c3m1r1a1"}'>Technology</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Technology_cont","cT":"Container","id":"c5c8c3m1r1a1","sN":5,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"AutoGen_cont","cT":"Container","id":"c1c5c8c3m1r1a1","sN":1,"aN":"c5c8c3m1r1a1"}'> <a id="AutoGen" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/autogen/" data-m='{"cN":"CatNav_AutoGen_nav","id":"n1c1c5c8c3m1r1a1","sN":1,"aN":"c1c5c8c3m1r1a1"}'>AutoGen</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"DirectX_cont","cT":"Container","id":"c2c5c8c3m1r1a1","sN":2,"aN":"c5c8c3m1r1a1"}'> <a id="DirectX" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/directx/" data-m='{"cN":"CatNav_DirectX_nav","id":"n1c2c5c8c3m1r1a1","sN":1,"aN":"c2c5c8c3m1r1a1"}'>DirectX</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"OpenAPI_cont","cT":"Container","id":"c3c5c8c3m1r1a1","sN":3,"aN":"c5c8c3m1r1a1"}'> <a id="Openapi" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/openapi/" data-m='{"cN":"CatNav_OpenAPI_nav","id":"n1c3c5c8c3m1r1a1","sN":1,"aN":"c3c5c8c3m1r1a1"}'>OpenAPI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Semantic Kernel_cont","cT":"Container","id":"c4c5c8c3m1r1a1","sN":4,"aN":"c5c8c3m1r1a1"}'> <a id="semantic-kernel" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/semantic-kernel/" data-m='{"cN":"CatNav_Semantic Kernel_nav","id":"n1c4c5c8c3m1r1a1","sN":1,"aN":"c4c5c8c3m1r1a1"}'>Semantic Kernel</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"SurfaceDuo_cont","cT":"Container","id":"c5c5c8c3m1r1a1","sN":5,"aN":"c5c8c3m1r1a1"}'> <a id="SurfaceDuo" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/surface-duo/" data-m='{"cN":"CatNav_SurfaceDuo_nav","id":"n1c5c5c8c3m1r1a1","sN":1,"aN":"c5c5c8c3m1r1a1"}'>SurfaceDuo</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows AI Platform_cont","cT":"Container","id":"c6c5c8c3m1r1a1","sN":6,"aN":"c5c8c3m1r1a1"}'> <a id="windows-ai-platform" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/windowsai/" data-m='{"cN":"CatNav_Windows AI Platform_nav","id":"n1c6c5c8c3m1r1a1","sN":1,"aN":"c6c5c8c3m1r1a1"}'>Windows AI Platform</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="Languages" aria-expanded="false" data-m='{"cN":"CatNav_Languages_nonnav","id":"nn6c8c3m1r1a1","sN":6,"aN":"c8c3m1r1a1"}'>Languages</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Languages_cont","cT":"Container","id":"c7c8c3m1r1a1","sN":7,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"C++_cont","cT":"Container","id":"c1c7c8c3m1r1a1","sN":1,"aN":"c7c8c3m1r1a1"}'> <a id="c++" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/cppblog/" data-m='{"cN":"CatNav_C++_nav","id":"n1c1c7c8c3m1r1a1","sN":1,"aN":"c1c7c8c3m1r1a1"}'>C++</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"C#_cont","cT":"Container","id":"c2c7c8c3m1r1a1","sN":2,"aN":"c7c8c3m1r1a1"}'> <a id="c#" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/csharp/" data-m='{"cN":"CatNav_C#_nav","id":"n1c2c7c8c3m1r1a1","sN":1,"aN":"c2c7c8c3m1r1a1"}'>C#</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"F#_cont","cT":"Container","id":"c3c7c8c3m1r1a1","sN":3,"aN":"c7c8c3m1r1a1"}'> <a id="F#" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/fsharp/" data-m='{"cN":"CatNav_F#_nav","id":"n1c3c7c8c3m1r1a1","sN":1,"aN":"c3c7c8c3m1r1a1"}'>F#</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"TypeScript_cont","cT":"Container","id":"c4c7c8c3m1r1a1","sN":4,"aN":"c7c8c3m1r1a1"}'> <a id="TypeScript" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/typescript/" data-m='{"cN":"CatNav_TypeScript_nav","id":"n1c4c7c8c3m1r1a1","sN":1,"aN":"c4c7c8c3m1r1a1"}'>TypeScript</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"PowerShell Community_cont","cT":"Container","id":"c5c7c8c3m1r1a1","sN":5,"aN":"c7c8c3m1r1a1"}'> <a id="powershell-community" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/powershell-community/" data-m='{"cN":"CatNav_PowerShell Community_nav","id":"n1c5c7c8c3m1r1a1","sN":1,"aN":"c5c7c8c3m1r1a1"}'>PowerShell Community</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"PowerShell Team_cont","cT":"Container","id":"c6c7c8c3m1r1a1","sN":6,"aN":"c7c8c3m1r1a1"}'> <a id="powershell-team" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/powershell/" data-m='{"cN":"CatNav_PowerShell Team_nav","id":"n1c6c7c8c3m1r1a1","sN":1,"aN":"c6c7c8c3m1r1a1"}'>PowerShell Team</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Python_cont","cT":"Container","id":"c7c7c8c3m1r1a1","sN":7,"aN":"c7c8c3m1r1a1"}'> <a id="Python" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/python/" data-m='{"cN":"CatNav_Python_nav","id":"n1c7c7c8c3m1r1a1","sN":1,"aN":"c7c7c8c3m1r1a1"}'>Python</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"JavaScript_cont","cT":"Container","id":"c8c7c8c3m1r1a1","sN":8,"aN":"c7c8c3m1r1a1"}'> <a id="JavaScript" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/visualstudio/tag/javascript/" data-m='{"cN":"CatNav_JavaScript_nav","id":"n1c8c7c8c3m1r1a1","sN":1,"aN":"c8c7c8c3m1r1a1"}'>JavaScript</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Java_cont","cT":"Container","id":"c9c7c8c3m1r1a1","sN":9,"aN":"c7c8c3m1r1a1"}'> <a id="Java" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/java/" data-m='{"cN":"CatNav_Java_nav","id":"n1c9c7c8c3m1r1a1","sN":1,"aN":"c9c7c8c3m1r1a1"}'>Java</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Java Blog in Chinese_cont","cT":"Container","id":"c10c7c8c3m1r1a1","sN":10,"aN":"c7c8c3m1r1a1"}'> <a id="java-blog-in-chinese" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/java-ch/" data-m='{"cN":"CatNav_Java Blog in Chinese_nav","id":"n1c10c7c8c3m1r1a1","sN":1,"aN":"c10c7c8c3m1r1a1"}'>Java Blog in Chinese</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Go_cont","cT":"Container","id":"c11c7c8c3m1r1a1","sN":11,"aN":"c7c8c3m1r1a1"}'> <a id="go" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/go/" data-m='{"cN":"CatNav_Go_nav","id":"n1c11c7c8c3m1r1a1","sN":1,"aN":"c11c7c8c3m1r1a1"}'>Go</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="c-shellmenu_36" aria-expanded="false" data-m='{"cN":"CatNav_.Net_nonnav","id":"nn8c8c3m1r1a1","sN":8,"aN":"c8c3m1r1a1"}'>.NET</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":".Net_cont","cT":"Container","id":"c9c8c3m1r1a1","sN":9,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"All .NET posts_cont","cT":"Container","id":"c1c9c8c3m1r1a1","sN":1,"aN":"c9c8c3m1r1a1"}'> <a id="all-dotnet-posts" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/ " data-m='{"cN":"CatNav_All .NET posts_nav","id":"n1c1c9c8c3m1r1a1","sN":1,"aN":"c1c9c8c3m1r1a1"}'>All .NET posts</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":".NET Aspire_cont","cT":"Container","id":"c2c9c8c3m1r1a1","sN":2,"aN":"c9c8c3m1r1a1"}'> <a id="c-shellmenu_38" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/dotnet-aspire/" data-m='{"cN":"CatNav_.NET Aspire_nav","id":"n1c2c9c8c3m1r1a1","sN":1,"aN":"c2c9c8c3m1r1a1"}'>.NET Aspire</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":".NET MAUI_cont","cT":"Container","id":"c3c9c8c3m1r1a1","sN":3,"aN":"c9c8c3m1r1a1"}'> <a id="dotnet-MAUI" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/maui/" data-m='{"cN":"CatNav_.NET MAUI_nav","id":"n1c3c9c8c3m1r1a1","sN":1,"aN":"c3c9c8c3m1r1a1"}'>.NET MAUI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"AI_cont","cT":"Container","id":"c4c9c8c3m1r1a1","sN":4,"aN":"c9c8c3m1r1a1"}'> <a id="AI" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/ai/" data-m='{"cN":"CatNav_AI_nav","id":"n1c4c9c8c3m1r1a1","sN":1,"aN":"c4c9c8c3m1r1a1"}'>AI</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"ASP.NET Core_cont","cT":"Container","id":"c5c9c8c3m1r1a1","sN":5,"aN":"c9c8c3m1r1a1"}'> <a id="aspnet-core" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/aspnetcore/" data-m='{"cN":"CatNav_ASP.NET Core_nav","id":"n1c5c9c8c3m1r1a1","sN":1,"aN":"c5c9c8c3m1r1a1"}'>ASP.NET Core</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Blazor_cont","cT":"Container","id":"c6c9c8c3m1r1a1","sN":6,"aN":"c9c8c3m1r1a1"}'> <a id="blazor" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/blazor/" data-m='{"cN":"CatNav_Blazor_nav","id":"n1c6c9c8c3m1r1a1","sN":1,"aN":"c6c9c8c3m1r1a1"}'>Blazor</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Entity Framework_cont","cT":"Container","id":"c7c9c8c3m1r1a1","sN":7,"aN":"c9c8c3m1r1a1"}'> <a id="entity-framework" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/entity-framework/" data-m='{"cN":"CatNav_Entity Framework_nav","id":"n1c7c9c8c3m1r1a1","sN":1,"aN":"c7c9c8c3m1r1a1"}'>Entity Framework</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Servicing_cont","cT":"Container","id":"c8c9c8c3m1r1a1","sN":8,"aN":"c9c8c3m1r1a1"}'> <a id="servicing" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet/category/maintenance-and-updates/" data-m='{"cN":"CatNav_Servicing_nav","id":"n1c8c9c8c3m1r1a1","sN":1,"aN":"c8c9c8c3m1r1a1"}'>Servicing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":".NET Blog in Chinese_cont","cT":"Container","id":"c9c9c8c3m1r1a1","sN":9,"aN":"c9c8c3m1r1a1"}'> <a id="dotnet-blog-in-chinese" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/dotnet-ch/" data-m='{"cN":"CatNav_.NET Blog in Chinese_nav","id":"n1c9c9c8c3m1r1a1","sN":1,"aN":"c9c9c8c3m1r1a1"}'>.NET Blog in Chinese</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="platform-development" aria-expanded="false" data-m='{"cN":"CatNav_Platform Development_nonnav","id":"nn10c8c3m1r1a1","sN":10,"aN":"c8c3m1r1a1"}'>Platform Development</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Platform Development_cont","cT":"Container","id":"c11c8c3m1r1a1","sN":11,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"#ifdef Windows_cont","cT":"Container","id":"c1c11c8c3m1r1a1","sN":1,"aN":"c11c8c3m1r1a1"}'> <a id="pax-windows" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/ifdef-windows/" data-m='{"cN":"CatNav_#ifdef Windows_nav","id":"n1c1c11c8c3m1r1a1","sN":1,"aN":"c1c11c8c3m1r1a1"}'>#ifdef Windows</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure Government_cont","cT":"Container","id":"c2c11c8c3m1r1a1","sN":2,"aN":"c11c8c3m1r1a1"}'> <a id="azure-government" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azuregov/" data-m='{"cN":"CatNav_Azure Government_nav","id":"n1c2c11c8c3m1r1a1","sN":1,"aN":"c2c11c8c3m1r1a1"}'>Azure Government</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure VM Runtime Team_cont","cT":"Container","id":"c3c11c8c3m1r1a1","sN":3,"aN":"c11c8c3m1r1a1"}'> <a id="azure-vm-runtime" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azure-vm-runtime/" data-m='{"cN":"CatNav_Azure VM Runtime Team_nav","id":"n1c3c11c8c3m1r1a1","sN":1,"aN":"c3c11c8c3m1r1a1"}'>Azure VM Runtime Team</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Bing Dev Center_cont","cT":"Container","id":"c4c11c8c3m1r1a1","sN":4,"aN":"c11c8c3m1r1a1"}'> <a id="bing-dev-center" class="js-subm-uhf-nav-link" href="https://blogs.bing.com/Developers-Blog/" data-m='{"cN":"CatNav_Bing Dev Center_nav","id":"n1c4c11c8c3m1r1a1","sN":1,"aN":"c4c11c8c3m1r1a1"}'>Bing Dev Center</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Edge Dev_cont","cT":"Container","id":"c5c11c8c3m1r1a1","sN":5,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-edge-dev" class="js-subm-uhf-nav-link" href="http://blogs.windows.com/msedgedev/" data-m='{"cN":"CatNav_Microsoft Edge Dev_nav","id":"n1c5c11c8c3m1r1a1","sN":1,"aN":"c5c11c8c3m1r1a1"}'>Microsoft Edge Dev</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Azure_cont","cT":"Container","id":"c6c11c8c3m1r1a1","sN":6,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-azure" class="js-subm-uhf-nav-link" href="http://azure.microsoft.com/blog/" data-m='{"cN":"CatNav_Microsoft Azure_nav","id":"n1c6c11c8c3m1r1a1","sN":1,"aN":"c6c11c8c3m1r1a1"}'>Microsoft Azure</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft 365 Developer_cont","cT":"Container","id":"c7c11c8c3m1r1a1","sN":7,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-365-developer" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/microsoft365dev/" data-m='{"cN":"CatNav_Microsoft 365 Developer_nav","id":"n1c7c11c8c3m1r1a1","sN":1,"aN":"c7c11c8c3m1r1a1"}'>Microsoft 365 Developer</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Microsoft Entra Identity Developer Blog_cont","cT":"Container","id":"c8c11c8c3m1r1a1","sN":8,"aN":"c11c8c3m1r1a1"}'> <a id="microsoft-entra-identity-developer-blog" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/identity/" data-m='{"cN":"CatNav_Microsoft Entra Identity Developer Blog_nav","id":"n1c8c11c8c3m1r1a1","sN":1,"aN":"c8c11c8c3m1r1a1"}'>Microsoft Entra Identity Developer Blog</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Old New Thing_cont","cT":"Container","id":"c9c11c8c3m1r1a1","sN":9,"aN":"c11c8c3m1r1a1"}'> <a id="old-new-thing" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/oldnewthing/" data-m='{"cN":"CatNav_Old New Thing_nav","id":"n1c9c11c8c3m1r1a1","sN":1,"aN":"c9c11c8c3m1r1a1"}'>Old New Thing</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Power Platform_cont","cT":"Container","id":"c10c11c8c3m1r1a1","sN":10,"aN":"c11c8c3m1r1a1"}'> <a id="power-platform" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/powerplatform/" data-m='{"cN":"CatNav_Power Platform_nav","id":"n1c10c11c8c3m1r1a1","sN":1,"aN":"c10c11c8c3m1r1a1"}'>Power Platform</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Windows MIDI and Music dev_cont","cT":"Container","id":"c11c11c8c3m1r1a1","sN":11,"aN":"c11c8c3m1r1a1"}'> <a id="windows-music-dev" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/windows-music-dev/" data-m='{"cN":"CatNav_Windows MIDI and Music dev_nav","id":"n1c11c11c8c3m1r1a1","sN":1,"aN":"c11c11c8c3m1r1a1"}'>Windows MIDI and Music dev</a> </li> </ul> </div> </li> <li class="nested-menu uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button type="button" id="data-development" aria-expanded="false" data-m='{"cN":"CatNav_Date Development_nonnav","id":"nn12c8c3m1r1a1","sN":12,"aN":"c8c3m1r1a1"}'>Data Development</button> <ul class="" data-class-idn="" aria-hidden="true" data-m='{"cN":"Date Development_cont","cT":"Container","id":"c13c8c3m1r1a1","sN":13,"aN":"c8c3m1r1a1"}'> <li class="js-nav-menu single-link" data-m='{"cN":"Azure Cosmos DB_cont","cT":"Container","id":"c1c13c8c3m1r1a1","sN":1,"aN":"c13c8c3m1r1a1"}'> <a id="azure-cosmos-db" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/cosmosdb/" data-m='{"cN":"CatNav_Azure Cosmos DB_nav","id":"n1c1c13c8c3m1r1a1","sN":1,"aN":"c1c13c8c3m1r1a1"}'> Azure Cosmos DB</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure Data Studio_cont","cT":"Container","id":"c2c13c8c3m1r1a1","sN":2,"aN":"c13c8c3m1r1a1"}'> <a id="azure-data-studio" class="js-subm-uhf-nav-link" href="https://cloudblogs.microsoft.com/sqlserver/?product=azure-data-studio" data-m='{"cN":"CatNav_Azure Data Studio_nav","id":"n1c2c13c8c3m1r1a1","sN":1,"aN":"c2c13c8c3m1r1a1"}'>Azure Data Studio</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Azure SQL_cont","cT":"Container","id":"c3c13c8c3m1r1a1","sN":3,"aN":"c13c8c3m1r1a1"}'> <a id="azure-SQL" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/azure-sql/" data-m='{"cN":"CatNav_Azure SQL_nav","id":"n1c3c13c8c3m1r1a1","sN":1,"aN":"c3c13c8c3m1r1a1"}'>Azure SQL</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"OData_cont","cT":"Container","id":"c4c13c8c3m1r1a1","sN":4,"aN":"c13c8c3m1r1a1"}'> <a id="OData" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/odata/" data-m='{"cN":"CatNav_OData_nav","id":"n1c4c13c8c3m1r1a1","sN":1,"aN":"c4c13c8c3m1r1a1"}'>OData</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"Revolutions R_cont","cT":"Container","id":"c5c13c8c3m1r1a1","sN":5,"aN":"c13c8c3m1r1a1"}'> <a id="revolutions-r" class="js-subm-uhf-nav-link" href="http://blog.revolutionanalytics.com/" data-m='{"cN":"CatNav_Revolutions R_nav","id":"n1c5c13c8c3m1r1a1","sN":1,"aN":"c5c13c8c3m1r1a1"}'>Revolutions R</a> </li> <li class="js-nav-menu single-link" data-m='{"cN":"SQL Server Data Tools_cont","cT":"Container","id":"c6c13c8c3m1r1a1","sN":6,"aN":"c13c8c3m1r1a1"}'> <a id="SQL-server-data-tools" class="js-subm-uhf-nav-link" href="https://devblogs.microsoft.com/ssdt/" data-m='{"cN":"CatNav_SQL Server Data Tools_nav","id":"n1c6c13c8c3m1r1a1","sN":1,"aN":"c6c13c8c3m1r1a1"}'>SQL Server Data Tools</a> </li> </ul> </div> </li> <li id="overflow-menu" class="overflow-menu x-hidden uhf-menu-item"> <div class="c-uhf-menu js-nav-menu"> <button data-m='{"pid":"More","id":"nn14c8c3m1r1a1","sN":14,"aN":"c8c3m1r1a1"}' type="button" aria-label="More" aria-expanded="false">More</button> <ul id="overflow-menu-list" aria-hidden="true" class="overflow-menu-list"> </ul> </div> </li> </ul> </nav> <div class="c-uhfh-actions" data-m='{"cN":"Header actions_cont","cT":"Container","id":"c9c3m1r1a1","sN":9,"aN":"c3m1r1a1"}'> <div class="wf-menu"></div> <form class="c-search" autocomplete="off" id="searchForm" name="searchForm" role="search" action="/search" method="GET" data-seAutoSuggest='' data-seautosuggestapi="https://www.microsoft.com/msstoreapiprod/api/autosuggest" data-m='{"cN":"GlobalNav_Search_cont","cT":"Container","id":"c1c9c3m1r1a1","sN":1,"aN":"c9c3m1r1a1"}' aria-expanded="false"> <input id="cli_shellHeaderSearchInput" aria-label="Search Expanded" aria-autocomplete="list" aria-expanded="false" aria-controls="universal-header-search-auto-suggest-transparent" aria-owns="universal-header-search-auto-suggest-ul" type="search" name="query" role="combobox" placeholder="Search" data-m='{"cN":"SearchBox_nav","id":"n1c1c9c3m1r1a1","sN":1,"aN":"c1c9c3m1r1a1"}' data-toggle="tooltip" data-placement="right" title="Search" /> <button id="search" aria-label="Search" class="c-glyph" data-m='{"cN":"Search_nav","id":"n2c1c9c3m1r1a1","sN":2,"aN":"c1c9c3m1r1a1"}' data-bi-mto="true" aria-expanded="false" disabled="disabled"> <span role="presentation">Search</span> <span role="tooltip" class="c-uhf-tooltip c-uhf-search-tooltip">Search</span> </button> <div class="m-auto-suggest" id="universal-header-search-auto-suggest-transparent" role="group"> <ul class="c-menu" id="universal-header-search-auto-suggest-ul" aria-label="Search Suggestions" aria-hidden="true" data-bi-dnt="true" data-bi-mto="true" data-js-auto-suggest-position="default" role="listbox" data-tel="jsll" data-m='{"cN":"search suggestions_cont","cT":"Container","id":"c3c1c9c3m1r1a1","sN":3,"aN":"c1c9c3m1r1a1"}'></ul> <ul class="c-menu f-auto-suggest-no-results" aria-hidden="true" data-js-auto-suggest-postion="default" data-js-auto-suggest-position="default" role="listbox"> <li class="c-menu-item"> <span tabindex="-1">No results</span></li> </ul> </div> </form> <button data-m='{"cN":"cancel-search","pid":"Cancel Search","id":"nn2c9c3m1r1a1","sN":2,"aN":"c9c3m1r1a1"}' id="cancel-search" class="cancel-search" aria-label="Cancel Search"> <span>Cancel</span> </button> </div> </div> </div> </header> </div> </div> </div><link rel="stylesheet" href="https://www.microsoft.com/onerfstatics/marketingsites-eus-prod/west-european/shell/_scrf/css/themes=default.device=uplevel_web_pc/1b-9d8ed9/c9-be0100/a6-e969ef/43-9f2e7c/82-8b5456/a0-5d3913/43-5a5ab8/ca-ae3ce4?ver=2.0&amp;_cf=02242021_3231" type="text/css" media="all" /><script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script><script src="https://www.microsoft.com/onerfstatics/marketingsites-eus-prod/shell/_scrf/js/themes=default/54-af9f9f/d4-fb1f57/e1-a50eee/e7-954872/d8-97d509/f0-251fe2/46-be1318/77-04a268/11-240c7b/63-077520/a4-34de62/f9-a5b2ce/db-bc0148/dc-7e9864/6d-c07ea1/6f-dafe8c/f6-aa5278/73-a24d00/6d-1e7ed0/b7-cadaa7/c4-898cf2/ca-40b7b0/4e-ee3a55/3e-f5c39b/c3-6454d7/f9-7592d3/d0-e64f3e/92-10345d/79-499886/7e-cda2d3/58-ab4971/ca-108466/e0-3c9860/de-884374/1f-100dea/33-abe4df/2b-8e0ae6?ver=2.0&_cf=02242021_3231&iife=1"></script> <!--/ UHF header --> <main class="devblogs-main" id="main" role="main"> <style> .img-hero-bg { background-image: var(--img-hero-bg); background-size: contain; background-position: right top; background-repeat: no-repeat; background-size: 67%; } .hero-body { padding-top: 4%; padding-bottom: 5%; } .clr-hero-bg { /* background-color: var(--clr-hero-bg); */ background: linear-gradient(180deg, #D2CCF8 -55.71%, #F9F8FE 59.27%); } html[theme=dark] .clr-hero-bg { background: linear-gradient(180deg, #221D46 -62.91%, #1F1F1F 80.84%); } .hero-body h1 { max-width: 489px; line-height: 44px; letter-spacing: -2px; padding-bottom: 24px; line-height: 42px; background: linear-gradient(30deg, #3F3682 25.01%, #6656D1 84.72%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } html[theme=dark] .hero-body h1 { background: linear-gradient(26deg, #9184EE 36.41%, #D9A7E0 104.78%); background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: transparent; } @media (min-width: 1084px) { .hero-body h1 { line-height: 72px; } } @media (max-width: 1084px) { .hero-body h1 { letter-spacing: -1px; } } .theme-light.js-global-head.f-closed.global-head-cont { margin-bottom: 0px; } @media (max-width: 628px) { .img-hero-bg { background-size: 75%; } } @media (min-width: 800px) { .highlights-section { display: grid; grid-template-columns: 44% 56%; } } .highlights-section { margin-bottom: 100px; } @media (min-width: 800px) { .highlights-summaries { max-width: 81%; padding-left: 14%; } } .highlights-card { position: relative; } .highlights-summary { position: relative; } .feature-bg .masonry-thumbnail img { width: 100%; max-height: unset; } .highlights-summary:nth-child(1n) .card-body .card-top>div { margin-top: 0px; } .highlights-summary:nth-child(1n), .highlights-summary:nth-child(3n) { margin-bottom: 24px; } .highlights-summary:nth-child(2n) { padding-bottom: 0px; margin-bottom: 0px; border: none; } @media (max-width: 800px) { .highlights-card { border-bottom: 1px solid var(--clr-border); padding-bottom: 24px; margin-bottom: 24px; } } .postexcerpt { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; } .highlights-summary:nth-child(4n) { padding-bottom: 0px; margin-bottom: 0px; border: none; } </style> <div class="wrapper clr-hero-bg"> <div class="container-evo img-hero-bg"> <!-- landing banner starts --> <!-- landing banner ends --> <div class="hero-body"> <h1 class="fs-68">Microsoft<br> Developer Blogs</h1> <p class="fs-20 fw-bold">Get the latest information, insights, and news from Microsoft.</p> </div> <section id="highlights" data-bi-area="highlights"> <div class="highlights-section"> <div class="highlights-card"><img src="https://devblogs.microsoft.com/wp-content/uploads/2024/11/Screenshot-2024-11-21-170028.png" alt="Featured Image"/><div class="netsposts-screen"><div class="featured-body" id="251478"><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 22, 2024</div></div><h3 class="fs-28 mb-12"><a href="https://devblogs.microsoft.com/visualstudio/top-5-github-copilot-features-in-visual-studio-from-microsoft-ignite-2024" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Top 5 GitHub Copilot Features in Visual Studio from Microsoft Ignite 2024</a></h3><div class="fs-16 mb-16 postexcerpt"> At this year’s Microsoft Ignite, it was truly exciting to see Scott, Dalia, and Jessie demo some of the most innovative features of GitHub Copilot that are transforming the developer experience in Visual Studio. From the breakout session, we highlighted five standout features that...</div><a href="https://devblogs.microsoft.com/visualstudio/top-5-github-copilot-features-in-visual-studio-from-microsoft-ignite-2024" class="read-more">Read more</a></div></div></div> </div></div><div class="highlights-summaries"><div class="highlights-summary border-bottom pb-24" id="3745"><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 21, 2024</div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/semantic-kernel/announcing-the-ga-release-of-the-openapi-plugin-for-net-and-python-in-semantic-kernel" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Announcing the GA Release of the OpenAPI Plugin for .NET and Python in Semantic Kernel</a></h3><div class="fs-16 mb-16 postexcerpt">We are thrilled to announce the General Availability (GA) release of the OpenAPI package for Semantic Kernel, available for both .NET and Python! With this significant milestone, developers can easily integrate existing APIs as plugins, enhancing the capabilities of their AI agents while...</div><a href="https://devblogs.microsoft.com/semantic-kernel/announcing-the-ga-release-of-the-openapi-plugin-for-net-and-python-in-semantic-kernel" class="read-more">Read more</a></div></div></div> <div class="highlights-summary border-bottom pb-24" id="231686"><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 21, 2024</div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/java/java-intelligent-application-templates-in-the-azure-ai-gallery" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Java Intelligent Application Templates in the Azure AI Gallery</a></h3><div class="fs-16 mb-16 postexcerpt">Artificial Intelligence (AI) is no longer a futuristic concept—it’s transforming how developers build and innovate applications today. To help Java developers harness the full potential of AI, Microsoft’s Azure AI App Templates gallery offers a growing collection of AI-powered...</div><a href="https://devblogs.microsoft.com/java/java-intelligent-application-templates-in-the-azure-ai-gallery" class="read-more">Read more</a></div></div></div> </div> </div> </section> </div> </div> <div class="wrapper"> <style> .netsposts-paginate .next.page-numbers.hidden { display: none; } /* as btn-secondary */ .netsposts-paginate .next.page-numbers { font-family: "Segoe UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; font-size: 14px; line-height: 20px; font-weight: 600; color: var(--clr-body); background-color: var(--clr-btn-greyscale-bg); padding: 5px 12px 7px 12px; border-radius: 4px; border: 1px solid var(--clr-btn-greyscale-border); text-decoration: none; display: inline-flex; justify-content: center; align-items: center; } @media (max-width: 1084px) { .netsposts-paginate .next.page-numbers { margin-bottom: 40px; } } .netsposts-paginate .next.page-numbers path { fill: var(--clr-btn-greyscale); } .netsposts-paginate .next.page-numbers:hover { color: var(--clr-btn-greyscale-hover); background-color: var(--clr-btn-greyscale-hover-bg); border-color: var(--clr-btn-greyscale-hover-border); text-decoration: none; } .netsposts-paginate .next.page-numbers:active { color: var(--clr-btn-greyscale-active); background-color: var(--clr-btn-greyscale-active-bg); border-color: var(--clr-btn-greyscale-active-border); } @media (forced-colors: active) { .netsposts-paginate .next.page-numbers { color: ButtonText; } .netsposts-paginate .next.page-numbers:hover { color: Highlight; } } /* sidebar */ span.card-text.listdisplay ul li { padding-bottom: 12px; } span.card-text.listdisplay ul li:last-child { padding-bottom: 0px; } .listdisplay ul { padding-left: 1rem; list-style-type: none; } /* rss button */ .container-sidebar-home aside .rssfeed-section a { display: inline-flex; align-items: center; gap: 6px; } .rssfeed-section a:hover, a.rssfeed-link:hover { background-color: #f5f5f5; text-decoration: none; } .rssfeed-section a:focus { border-color: #000; } .rssfeed-section a:active { background-color: #E0E0E0; } html[theme="dark"] .rssfeed-section a:hover, html[theme="dark"] .rssfeed-section a:active { background-color: #141414; } html[theme="dark"] .rssfeed-section a:focus { border-color: #fff; } html[theme="dark"] .evo-dropdown-button { background-color: #000; } .rssfeed-link { border: 1px solid #D1D1D1; line-height: 1; height: 32px; padding: 7px 12px 8px; border-radius: 4px; } html[theme='dark'] .rssfeed-link { border: 1px solid #525252; } html[theme='dark'] .rssfeed-link:hover { background: #1F1F1F; text-decoration: none; } .rssfeed-section svg { width: 18px; height: 18px; } .rssfeed-link span { line-height: 1.2; display: inline-block; vertical-align: top; font-size: 14px; } .rssfeed-link.link-mobile.hide-mobile { display: none; } .rssfeed-link.link-mobile svg { width: 18px; height: 18px; } </style> <div class="container-evo mt-100"> <section id="latest-posts" class="mb-40" data-bi-area="latest_posts"> <div id="dynamic_reload_with_icon" class="container-sidebar-home netsposts-screen ajax_load"><div><div class="d-flex justify-content-between border-bottom mb-40"><h2 class="fs-24 fw-600 mb-16">Latest posts</h2><style> /* Storing grid globle styles here for now*/ .masonry-card { box-sizing: border-box; } .archive-posts.grid-view { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); } /* Masonry thumbnail */ .masonry-thumbnail { display: flex; justify-content: center; } .grid-view .masonry-thumbnail { align-items: center; width: 100%; min-height: 188px; } .grid-view .masonry-thumbnail img { max-height: 164px; width: auto; } .masonry-thumbnail { background: var(--clr-card-image-bg); border-radius: 8px; padding: 12px; } /* Grid View */ .home.blog .archive-posts.grid-view .masonry-card { display: block; } /* Single Column View */ .archive-posts.single-column { display: block; } .archive-posts.single-column .masonry-card { min-height: 311px; margin-bottom: 24px; } @media (min-width: 1084px) { .masonry-container { gap: 40px; } .masonry-card { padding: 24px; } .archive-posts.single-column .masonry-card { margin-bottom: 40px; } } @media (min-width: 900px) { .card-body { display: flex; flex-direction: column; justify-content: space-between; flex-grow: 1; } .archive-posts.single-column .card-body { width: 60%; } } @media (max-width: 760px) { .masonry-container { grid-template-columns: 1fr; } .single-column .masonry-card { display: block; } .single-column .masonry-thumbnail { margin-bottom: 16px; } } .single-column .masonry-card { flex-direction: row; gap: 32px; } @media (min-width: 761px) { .single-column .masonry-card .masonry-thumbnail { flex-grow: 1; align-items: center; min-width: 240px; max-width: 449px; width: 40%; } } .single-column .card-body .card-top>div { margin-top: 0px; } /* Style the button */ .layout-toggle { display: none; } @media (min-width: 760px) { .layout-toggle { display: flex; gap: 12px; height: 32px; } } .layout-toggle button { background-color: transparent; border: none; cursor: pointer; padding: 0px; } .layout-toggle button svg path { fill: var(--clr-landing-navbar); } .layout-toggle button.active svg rect { fill: var(--clr-btn-toggle); stroke: none; } .layout-toggle button:not(.active) svg rect { fill: var(--clr-card-bg); stroke: var(--clr-btn-greyscale-border); } .layout-toggle button.active svg path { fill: white; } .layout-toggle button:not(.active):hover svg rect { fill: var(--clr-btn-greyscale-hover-bg); } .layout-toggle button:focus { border-radius: 4px; } .excerpt-title { display: -webkit-box; -webkit-line-clamp: 3; /* Number of full lines */ -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; } .excerpt-body { display: -webkit-box; -webkit-line-clamp: 3; /* Number of full lines */ -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; } </style> <div class="layout-toggle"> <!-- Grid View Button --> <button id="grid-view-btn" class="active" aria-label="Grid View" data-bi-area="latest posts" data-bi-id="landing_page_latest_posts_grid_toggle"> <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect x="0.5" y="0.5" width="31" height="31" rx="3.5" /> <path d="M12.75 17C13.9926 17 15 18.0074 15 19.25V22.75C15 23.9926 13.9926 25 12.75 25H9.25C8.00736 25 7 23.9926 7 22.75V19.25C7 18.0074 8.00736 17 9.25 17H12.75ZM22.75 17C23.9926 17 25 18.0074 25 19.25V22.75C25 23.9926 23.9926 25 22.75 25H19.25C18.0074 25 17 23.9926 17 22.75V19.25C17 18.0074 18.0074 17 19.25 17H22.75ZM12.75 18.5H9.25C8.83579 18.5 8.5 18.8358 8.5 19.25V22.75C8.5 23.1642 8.83579 23.5 9.25 23.5H12.75C13.1642 23.5 13.5 23.1642 13.5 22.75V19.25C13.5 18.8358 13.1642 18.5 12.75 18.5ZM22.75 18.5H19.25C18.8358 18.5 18.5 18.8358 18.5 19.25V22.75C18.5 23.1642 18.8358 23.5 19.25 23.5H22.75C23.1642 23.5 23.5 23.1642 23.5 22.75V19.25C23.5 18.8358 23.1642 18.5 22.75 18.5ZM12.75 7C13.9926 7 15 8.00736 15 9.25V12.75C15 13.9926 13.9926 15 12.75 15H9.25C8.00736 15 7 13.9926 7 12.75V9.25C7 8.00736 8.00736 7 9.25 7H12.75ZM22.75 7C23.9926 7 25 8.00736 25 9.25V12.75C25 13.9926 23.9926 15 22.75 15H19.25C18.0074 15 17 13.9926 17 12.75V9.25C17 8.00736 18.0074 7 19.25 7H22.75ZM12.75 8.5H9.25C8.83579 8.5 8.5 8.83579 8.5 9.25V12.75C8.5 13.1642 8.83579 13.5 9.25 13.5H12.75C13.1642 13.5 13.5 13.1642 13.5 12.75V9.25C13.5 8.83579 13.1642 8.5 12.75 8.5ZM22.75 8.5H19.25C18.8358 8.5 18.5 8.83579 18.5 9.25V12.75C18.5 13.1642 18.8358 13.5 19.25 13.5H22.75C23.1642 13.5 23.5 13.1642 23.5 12.75V9.25C23.5 8.83579 23.1642 8.5 22.75 8.5Z" fill="#3A96DD" /> </svg> </button> <!-- Column View Button --> <button id="column-view-btn" aria-label="Column View" data-bi-area="latest posts" data-bi-id="landing_page_latest_posts_column_toggle"> <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect x="0.5" y="0.5" width="31" height="31" rx="3.5" /> <path d="M8.25 8C7.00736 8 6 9.00736 6 10.25V12.75C6 13.9926 7.00736 15 8.25 15H10.75C11.9926 15 13 13.9926 13 12.75V10.25C13 9.00736 11.9926 8 10.75 8H8.25ZM7.5 10.25C7.5 9.83579 7.83579 9.5 8.25 9.5H10.75C11.1642 9.5 11.5 9.83579 11.5 10.25V12.75C11.5 13.1642 11.1642 13.5 10.75 13.5H8.25C7.83579 13.5 7.5 13.1642 7.5 12.75V10.25ZM15.25 9C14.8358 9 14.5 9.33579 14.5 9.75C14.5 10.1642 14.8358 10.5 15.25 10.5H25.25C25.6642 10.5 26 10.1642 26 9.75C26 9.33579 25.6642 9 25.25 9H15.25ZM15.25 12C14.8358 12 14.5 12.3358 14.5 12.75C14.5 13.1642 14.8358 13.5 15.25 13.5H22.25C22.6642 13.5 23 13.1642 23 12.75C23 12.3358 22.6642 12 22.25 12H15.25ZM8.25 17C7.00736 17 6 18.0074 6 19.25V21.75C6 22.9926 7.00736 24 8.25 24H10.75C11.9926 24 13 22.9926 13 21.75V19.25C13 18.0074 11.9926 17 10.75 17H8.25ZM7.5 19.25C7.5 18.8358 7.83579 18.5 8.25 18.5H10.75C11.1642 18.5 11.5 18.8358 11.5 19.25V21.75C11.5 22.1642 11.1642 22.5 10.75 22.5H8.25C7.83579 22.5 7.5 22.1642 7.5 21.75V19.25ZM15.25 18C14.8358 18 14.5 18.3358 14.5 18.75C14.5 19.1642 14.8358 19.5 15.25 19.5H25.25C25.6642 19.5 26 19.1642 26 18.75C26 18.3358 25.6642 18 25.25 18H15.25ZM15.25 21C14.8358 21 14.5 21.3358 14.5 21.75C14.5 22.1642 14.8358 22.5 15.25 22.5H22.25C22.6642 22.5 23 22.1642 23 21.75C23 21.3358 22.6642 21 22.25 21H15.25Z" fill="white" /> </svg> </button> </div> <script> document.addEventListener('DOMContentLoaded', function () { // detect if we are on the landing page or a blog home page in PHP, but otherwise keep the logic in JS for clarity const isMainSite = true; // Single column layout view toggle const wrappers = document.querySelectorAll('.archive-posts'); const paginateSelector = (isMainSite ? '.netsposts-paginate .next' : '#pload-more' ); const paginate = document.querySelector(paginateSelector); const gridButton = document.getElementById('grid-view-btn'); const columnButton = document.getElementById('column-view-btn'); // Check for stored layout in localStorage let storedLayout = localStorage.getItem('layout') || 'grid-view'; // Default is grid-view // Apply the stored layout wrappers.forEach(wrapper => { wrapper.classList.add(storedLayout); }); updateLatestPostsTracking(storedLayout); // Function to update the layout state in localStorage function updateLayoutState(layout) { localStorage.setItem('layout', layout); // Store layout in localStorage } // function to update data bi attributes to reflect the current layout function updateLatestPostsTracking(layout) { let layoutString = ''; let cardLinkSelector = ( isMainSite ? 'netsposts-posttitle-link' : 'single-click' ); // make layout string compliant with tracking requirements switch (layout) { case 'grid-view': layoutString = 'grid'; break; case 'single-column': layoutString = 'column'; break; } // update data attributes on all cards wrappers.forEach(wrapper => { // get current collection of cards in case new cards have been added let cards = wrapper.getElementsByClassName(cardLinkSelector); Array.from(cards).forEach(card => { if (isMainSite) { card.setAttribute('data-bi-id', 'landing_page_latest_posts_'+layoutString+'_card'); } else { card.setAttribute('data-bi-id', 'blog_home_page_latest_posts_'+layoutString+'_card_singleclick'); } }) }); if (paginate) { // update data attributes on pagination if (isMainSite) { paginate.setAttribute('data-bi-id', 'landing_page_latest_posts_'+layoutString+'_load_more'); } else { paginate.setAttribute('data-bi-id', 'blog_home_page_latest_posts_'+layoutString+'_load_more'); } } } // Function to check screen size and apply the correct layout (but without removing single-column) function checkScreenSize() { // No need to remove single-column for smaller screens storedLayout = localStorage.getItem('layout'); wrappers.forEach(wrapper => { if (storedLayout === 'single-column') { wrapper.classList.remove('grid-view'); wrapper.classList.add('single-column'); } else { wrapper.classList.remove('single-column'); wrapper.classList.add('grid-view'); } }); // Update button active state based on stored layout if (storedLayout === 'single-column') { columnButton.classList.add('active'); gridButton.classList.remove('active'); } else { gridButton.classList.add('active'); columnButton.classList.remove('active'); } } // Run check on load and window resize checkScreenSize(); window.addEventListener('resize', checkScreenSize); // Set event listener for Grid View button gridButton.addEventListener('click', function () { wrappers.forEach(wrapper => { wrapper.classList.remove('single-column'); wrapper.classList.add('grid-view'); }); // Update active button state gridButton.classList.add('active'); columnButton.classList.remove('active'); updateLayoutState('grid-view'); // Save grid-view in localStorage updateLatestPostsTracking('grid-view'); // update data bi attr }); // Set event listener for Column View button columnButton.addEventListener('click', function () { wrappers.forEach(wrapper => { wrapper.classList.remove('grid-view'); wrapper.classList.add('single-column'); }); // Update active button state columnButton.classList.add('active'); gridButton.classList.remove('active'); updateLayoutState('single-column'); // Save single-column in localStorage updateLatestPostsTracking('single-column'); // update data bi attr }); }); </script></div><div class="landing archive-posts masonry-container gap-20 mb-40"><div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="251578"><div class="masonry-thumbnail"><img width="700" height="393" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2024/11/run-build-insights-on-file-selection-file-selectio.png" class="post-thumbnail wp-post-image" alt="Run Build Insights on File Selection File Selection Command in contextual menu of selected files." decoding="async" fetchpriority="high" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 27, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>0</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/visualstudio/updates-for-c-developers-in-visual-studio-2022-17-12" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Updates for C++ developers in Visual Studio 2022 17.12</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/4/2023/08/SyProfile-Large-96x96.jpg" alt="Author Avatar"></div>Sy Brand</div></div><div class="excerpt-body fs-16 mb-24">Visual Studio 17.12 is here and comes with a host of new features for C++ developers. We’ve made improvements across our toolchain, C++ Build Insights, Unreal Engine support, and more. This post gives a quick overview of what’s available; for all the details, see What’s New for C++...</div></div><div class="pt-16 border-top-light clr-grey-61">Visual Studio Blog</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="54746"><div class="masonry-thumbnail"><img width="1441" height="811" src="https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2024/11/aievaluations.jpg" class="post-thumbnail wp-post-image" alt="Image aievaluations jpg" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 26, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4"><div class="d-flex align-items-center clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8423H15.4C16.2962 13.8423 17 13.1288 17 12.2764V5.56582C17 4.71348 16.2962 4 15.4 4H4.6C3.70383 4 3 4.71348 3 5.56582V12.2764C3 13.1288 3.70383 13.8423 4.6 13.8423H6.19908L6.2 17L6.20346 16.9997L6.20502 16.9988L10.4809 13.8423ZM6.79895 17.8034C6.35668 18.1298 5.73 18.0406 5.39921 17.6042C5.26989 17.4335 5.2 17.2262 5.2 17.0133L5.19937 14.8423H4.6C3.16406 14.8423 2 13.6935 2 12.2764V5.56582C2 4.14876 3.16406 3 4.6 3H15.4C16.8359 3 18 4.14876 18 5.56582V12.2764C18 13.6935 16.8359 14.8423 15.4 14.8423H10.81L6.79895 17.8034Z" fill="white"/> </svg></div><div class="d-flex align-items-center clr-grey-61"><span class="screen-reader-text">Post comments count</span>0</div></div><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>0</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/dotnet/evaluate-the-quality-of-your-ai-applications-with-ease" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Evaluate the quality of your AI applications with ease</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/10/2023/09/wendy-96x96.jpeg" alt="Author Avatar"></div>Wendy Breiding (SHE/HER)</div></div><div class="excerpt-body fs-16 mb-24">Get started with the new Microsoft.Extensions.AI.Evaluation library to kickstart your Intelligent Application eveluation journey.</div></div><div class="pt-16 border-top-light clr-grey-61">.NET Blog</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="568"><div class="masonry-thumbnail"><img width="3150" height="1620" src="https://devblogs.microsoft.com/develop-from-the-cloud/wp-content/uploads/sites/81/2024/05/default-devbox.png" class="post-thumbnail default-featured-img" alt="Image default devbox" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 26, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4"><div class="d-flex align-items-center clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8423H15.4C16.2962 13.8423 17 13.1288 17 12.2764V5.56582C17 4.71348 16.2962 4 15.4 4H4.6C3.70383 4 3 4.71348 3 5.56582V12.2764C3 13.1288 3.70383 13.8423 4.6 13.8423H6.19908L6.2 17L6.20346 16.9997L6.20502 16.9988L10.4809 13.8423ZM6.79895 17.8034C6.35668 18.1298 5.73 18.0406 5.39921 17.6042C5.26989 17.4335 5.2 17.2262 5.2 17.0133L5.19937 14.8423H4.6C3.16406 14.8423 2 13.6935 2 12.2764V5.56582C2 4.14876 3.16406 3 4.6 3H15.4C16.8359 3 18 4.14876 18 5.56582V12.2764C18 13.6935 16.8359 14.8423 15.4 14.8423H10.81L6.79895 17.8034Z" fill="white"/> </svg></div><div class="d-flex align-items-center clr-grey-61"><span class="screen-reader-text">Post comments count</span>0</div></div><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>0</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/develop-from-the-cloud/whats-new-in-azure-devtest-labs" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">What’s new in Azure DevTest Labs</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/81/letter-avatar/ace4792085a2acca44242a6f6c0d902a.svg" alt="Author Avatar"></div>Anish Trakru</div></div><div class="excerpt-body fs-16 mb-24">DevTest labs now supports the capability to access Azure DevOps artifact repos through Managed Identities and GitHub artifact repos through GitHub app authentication. Additionally, you can now also access the lab storage account through Managed Identities. Until now users have accessed...</div></div><div class="pt-16 border-top-light clr-grey-61">Develop from the cloud</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="251549"><div class="masonry-thumbnail"><img width="1920" height="1080" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2024/11/Debugging_teal.jpg" class="post-thumbnail wp-post-image" alt="Image Debugging teal" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 26, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>0</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/visualstudio/debugger-and-diagnostics-updates-in-visual-studio-17-12" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Debugger and Diagnostics updates in Visual Studio 17.12</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/4/2021/07/Capture-1-150x150.png" alt="Author Avatar"></div>Harshada Hole</div></div><div class="excerpt-body fs-16 mb-24">We are thrilled to announce a host of exciting new features in Visual Studio 17.12, designed to enhance your development experience and boost your productivity. Our team has been working diligently to address some of the most popular requests from our developer community, and we are...</div></div><div class="pt-16 border-top-light clr-grey-61">Visual Studio Blog</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="110575"><div class="masonry-thumbnail"><img width="1920" height="1080" src="https://devblogs.microsoft.com/oldnewthing/wp-content/uploads/sites/38/2024/10/banner-oldnewthing-blue-16x9-1.png" class="post-thumbnail default-featured-img" alt="Banner image" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 26, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4"><div class="d-flex align-items-center clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8423H15.4C16.2962 13.8423 17 13.1288 17 12.2764V5.56582C17 4.71348 16.2962 4 15.4 4H4.6C3.70383 4 3 4.71348 3 5.56582V12.2764C3 13.1288 3.70383 13.8423 4.6 13.8423H6.19908L6.2 17L6.20346 16.9997L6.20502 16.9988L10.4809 13.8423ZM6.79895 17.8034C6.35668 18.1298 5.73 18.0406 5.39921 17.6042C5.26989 17.4335 5.2 17.2262 5.2 17.0133L5.19937 14.8423H4.6C3.16406 14.8423 2 13.6935 2 12.2764V5.56582C2 4.14876 3.16406 3 4.6 3H15.4C16.8359 3 18 4.14876 18 5.56582V12.2764C18 13.6935 16.8359 14.8423 15.4 14.8423H10.81L6.79895 17.8034Z" fill="white"/> </svg></div><div class="d-flex align-items-center clr-grey-61"><span class="screen-reader-text">Post comments count</span>0</div></div><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>0</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/oldnewthing/20241126-00/?p=110575" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Microspeak: Real estate and Airspace</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/38/2019/02/RaymondChen_5in-150x150.jpg" alt="Author Avatar"></div>Raymond Chen</div></div><div class="excerpt-body fs-16 mb-24">Space on the screen and negotiating control over it.</div></div><div class="pt-16 border-top-light clr-grey-61">The Old New Thing</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="369"><div class="masonry-thumbnail"><img width="1920" height="1742" src="https://devblogs.microsoft.com/all-things-azure/wp-content/uploads/sites/83/2024/11/MS_AzureBlog_Blog-2_Comic_112224-1.png" class="post-thumbnail wp-post-image" alt="Chat with your data: Chat-GPT like enterprise search" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 25, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4"><div class="d-flex align-items-center clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8423H15.4C16.2962 13.8423 17 13.1288 17 12.2764V5.56582C17 4.71348 16.2962 4 15.4 4H4.6C3.70383 4 3 4.71348 3 5.56582V12.2764C3 13.1288 3.70383 13.8423 4.6 13.8423H6.19908L6.2 17L6.20346 16.9997L6.20502 16.9988L10.4809 13.8423ZM6.79895 17.8034C6.35668 18.1298 5.73 18.0406 5.39921 17.6042C5.26989 17.4335 5.2 17.2262 5.2 17.0133L5.19937 14.8423H4.6C3.16406 14.8423 2 13.6935 2 12.2764V5.56582C2 4.14876 3.16406 3 4.6 3H15.4C16.8359 3 18 4.14876 18 5.56582V12.2764C18 13.6935 16.8359 14.8423 15.4 14.8423H10.81L6.79895 17.8034Z" fill="white"/> </svg></div><div class="d-flex align-items-center clr-grey-61"><span class="screen-reader-text">Post comments count</span>0</div></div><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>2</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/all-things-azure/how-to-build-chatgpt-like-enterprise-search-on-your-own-data" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">How to build ChatGPT-like enterprise search on your own data</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/83/letter-avatar/43c372a9ccba599232e4eeb19826bd66.svg" alt="Author Avatar"></div>Priyanka Vergadia</div></div><div class="excerpt-body fs-16 mb-24">Do you find yourself drowning in company documentation, spending hours searching through SharePoint, knowledge bases, and contract repositories for one specific piece of information? You're not alone. Organizations now have plenty of information – the challenge lies in finding the right...</div></div><div class="pt-16 border-top-light clr-grey-61">All things Azure</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="54729"><div class="masonry-thumbnail"><img width="1920" height="1080" src="https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2024/11/openapi-document-generation-dotnet9.jpg" class="post-thumbnail wp-post-image" alt="Image openapi document generation dotnet9 jpg" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 25, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4"><div class="d-flex align-items-center clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8423H15.4C16.2962 13.8423 17 13.1288 17 12.2764V5.56582C17 4.71348 16.2962 4 15.4 4H4.6C3.70383 4 3 4.71348 3 5.56582V12.2764C3 13.1288 3.70383 13.8423 4.6 13.8423H6.19908L6.2 17L6.20346 16.9997L6.20502 16.9988L10.4809 13.8423ZM6.79895 17.8034C6.35668 18.1298 5.73 18.0406 5.39921 17.6042C5.26989 17.4335 5.2 17.2262 5.2 17.0133L5.19937 14.8423H4.6C3.16406 14.8423 2 13.6935 2 12.2764V5.56582C2 4.14876 3.16406 3 4.6 3H15.4C16.8359 3 18 4.14876 18 5.56582V12.2764C18 13.6935 16.8359 14.8423 15.4 14.8423H10.81L6.79895 17.8034Z" fill="white"/> </svg></div><div class="d-flex align-items-center clr-grey-61"><span class="screen-reader-text">Post comments count</span>5</div></div><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>1</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/dotnet/dotnet9-openapi" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">OpenAPI document generation in .NET 9</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/10/letter-avatar/7f8583e83a214808b76668e27274dc40.svg" alt="Author Avatar"></div>Mike Kistler</div></div><div class="excerpt-body fs-16 mb-24">Introducing the New OpenAPI Document Generation Feature in .NET 9. Let's take a look at what it is, how to use it, and how it streamlines API development in .NET.</div></div><div class="pt-16 border-top-light clr-grey-61">.NET Blog</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="3890"><div class="masonry-thumbnail"><img width="819" height="452" src="https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2024/04/office-hours-blog-image.png" class="post-thumbnail wp-post-image" alt="Image office hours blog image" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 25, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4"><div class="d-flex align-items-center clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8423H15.4C16.2962 13.8423 17 13.1288 17 12.2764V5.56582C17 4.71348 16.2962 4 15.4 4H4.6C3.70383 4 3 4.71348 3 5.56582V12.2764C3 13.1288 3.70383 13.8423 4.6 13.8423H6.19908L6.2 17L6.20346 16.9997L6.20502 16.9988L10.4809 13.8423ZM6.79895 17.8034C6.35668 18.1298 5.73 18.0406 5.39921 17.6042C5.26989 17.4335 5.2 17.2262 5.2 17.0133L5.19937 14.8423H4.6C3.16406 14.8423 2 13.6935 2 12.2764V5.56582C2 4.14876 3.16406 3 4.6 3H15.4C16.8359 3 18 4.14876 18 5.56582V12.2764C18 13.6935 16.8359 14.8423 15.4 14.8423H10.81L6.79895 17.8034Z" fill="white"/> </svg></div><div class="d-flex align-items-center clr-grey-61"><span class="screen-reader-text">Post comments count</span>0</div></div><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>0</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/semantic-kernel/microsoft-semantic-kernel-office-hours-update" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Microsoft Semantic Kernel Office Hours Update</a></h3><div class="d-flex justify-content-between align-items-center mb-12"><div class="d-flex gap-6"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/78/2024/02/Sophia-Pandey-96x96.jpeg" alt="Author Avatar"></div>Sophia Lagerkrans-Pandey</div></div><div class="excerpt-body fs-16 mb-24">Microsoft Semantic Kernel Office Hours Update Over the upcoming Holidays period there are several office hours sessions that we'll be cancelling. Below is an updated view of our upcoming office hours availability. We will resume with regularly scheduled Office Hours on January 8th for...</div></div><div class="pt-16 border-top-light clr-grey-61">Semantic Kernel</div></div></div> <div class="masonry-card box bg-white d-flex justify-content-between flex-column p-16 rounded shadow position-relative border-1" id="3732"><div class="masonry-thumbnail"><img width="654" height="362" src="https://devblogs.microsoft.com/semantic-kernel/wp-content/uploads/sites/78/2024/03/Architecting-AI-Apps-with-Semantic-Kernel-1.png" class="post-thumbnail wp-post-image" alt="Image Architecting AI Apps with Semantic Kernel" decoding="async" /></div><div class="card-body"><div class="card-top"><div class="d-flex align-items-center justify-content-between gap-32 mt-16 mb-16"><div>Nov 25, 2024</div><div class="d-flex align-items-end gap-12"><div class="d-flex gap-4"><div class="d-flex align-items-center clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4809 13.8423H15.4C16.2962 13.8423 17 13.1288 17 12.2764V5.56582C17 4.71348 16.2962 4 15.4 4H4.6C3.70383 4 3 4.71348 3 5.56582V12.2764C3 13.1288 3.70383 13.8423 4.6 13.8423H6.19908L6.2 17L6.20346 16.9997L6.20502 16.9988L10.4809 13.8423ZM6.79895 17.8034C6.35668 18.1298 5.73 18.0406 5.39921 17.6042C5.26989 17.4335 5.2 17.2262 5.2 17.0133L5.19937 14.8423H4.6C3.16406 14.8423 2 13.6935 2 12.2764V5.56582C2 4.14876 3.16406 3 4.6 3H15.4C16.8359 3 18 4.14876 18 5.56582V12.2764C18 13.6935 16.8359 14.8423 15.4 14.8423H10.81L6.79895 17.8034Z" fill="white"/> </svg></div><div class="d-flex align-items-center clr-grey-61"><span class="screen-reader-text">Post comments count</span>0</div></div><div class="d-flex gap-4 clr-grey-61"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M10.4965 17.3028L16.7408 10.9994C18.4252 9.28856 18.4199 6.52549 16.7239 4.81249C15.0611 3.13292 12.3961 3.0895 10.6978 4.69086C10.6612 4.72539 10.6251 4.76068 10.5894 4.79673L9.99299 5.40026L9.38843 4.78963C9.35529 4.75616 9.32175 4.72333 9.28783 4.69116C7.58595 3.07726 4.91654 3.10193 3.26122 4.7739C1.5729 6.4792 1.58114 9.25004 3.27679 10.9627L9.55368 17.3028C9.81404 17.5657 10.2362 17.5657 10.4965 17.3028ZM11.3 5.50029C12.5964 4.19135 14.7025 4.19204 16.0133 5.51604C17.3253 6.84123 17.3272 8.97734 16.0292 10.2968L16.0282 10.2978L10.0252 16.3577L3.98743 10.2592C2.67408 8.93263 2.67286 6.78953 3.97185 5.47746C5.26525 4.17106 7.36984 4.17208 8.6778 5.49319L9.63801 6.46306C9.8338 6.66082 10.1534 6.66067 10.349 6.46272L11.3 5.50029Z" fill="#242424" /></svg><span class="neutral-color"><span class="screen-reader-text">Post likes count</span>0</span></div></div></div><h3 class="fs-24 mb-16"><a href="https://devblogs.microsoft.com/semantic-kernel/unlocking-the-power-of-memory-announcing-general-availability-of-semantic-kernels-memory-packages" class="netsposts-posttitle-link single-click excerpt-title" data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_card">Unlocking the Power of Memory: Announcing General Availability of Semantic Kernel’s Memory Packages</a></h3><div class="d-flex gap-6 align-items-center mb-12"><div class="avatar-parent"><img style="width: 20px; height: 20px;" class="avatar-20 rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/78/letter-avatar/946f4448084ba84faa79c66f684d8559.svg" alt="Author Avatar"><img style="width: 20px; height: 20px;" class="avatar-20 rounded-pill" src="https://devblogs.microsoft.com/wp-content/uploads/sites/78/2024/03/1594794760570-96x96.jpeg" alt="Author Avatar"></div><div>Wes, </div><div>Eduard</div></div><div class="excerpt-body fs-16 mb-24">We are thrilled to announce the General Availability (GA) of our Memory packages for .NET, Java, and Python! The Semantic Kernel team and our partners have been working hard to allow you to quickly connect to vector stores and make it easy for you to do embeddings and data retrieval...</div></div><div class="pt-16 border-top-light clr-grey-61">Semantic Kernel</div></div></div> </div><div class="netsposts-paginate fs-16 d-flex justify-content-center" data-bi-area="latest_posts" data-bi-id="landing_page_latest_posts_load_more"><span aria-current="page" class="page-numbers current">1</span> <span class="page-numbers dots">&hellip;</span> <a class="page-numbers" href="https://devblogs.microsoft.com/?npe-page=48">48</a> <a data-bi-area="latest posts" data-bi-id="landing_page_latest posts_grid_load_more"class="next page-numbers" href="https://devblogs.microsoft.com/?npe-page=2">Load more posts</a></div><div class="netsposts-preloader lp-loader hidden"><div class="cv-spinner"> <span class="spinner"></span> </div></div></div><aside><div class="border-bottom mb-16 toggleWrapper"><button class="btn-no-styles w-100 d-flex justify-content-between align-items-center px-8 mb-16 toggleButton" aria-expanded="false" aria-controls="leftContentTopBloggers"><h2 class="fs-20">All Blogs</h2><div class="toggleIcon d-flex align-items-center"></div></button><div id="leftContentTopBloggers" class="toggleContent px-8 pb-12 mb-16 scroll-bar" style="display: none;"><span class="card-text listdisplay"><ul><li><a href='https://devblogs.microsoft.com/dotnet/' title='.NET Blog' class='d-flex align-items-center gap-4'>.NET Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/oldnewthing' title='The Old New Thing' class='d-flex align-items-center gap-4'>The Old New Thing <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/visualstudio/' title='Visual Studio Blog' class='d-flex align-items-center gap-4'>Visual Studio Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/microsoft365dev' title='Microsoft 365 Developer Blog' class='d-flex align-items-center gap-4'>Microsoft 365 Developer Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/directx' title='DirectX Developer Blog' class='d-flex align-items-center gap-4'>DirectX Developer Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/cppblog' title='C++ Team Blog' class='d-flex align-items-center gap-4'>C++ Team Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/commandline' title='Windows Command Line' class='d-flex align-items-center gap-4'>Windows Command Line <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/devops/' title='Azure DevOps Blog' class='d-flex align-items-center gap-4'>Azure DevOps Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/typescript' title='TypeScript' class='d-flex align-items-center gap-4'>TypeScript <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/powershell' title='PowerShell Team' class='d-flex align-items-center gap-4'>PowerShell Team <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/premier-developer' title='Developer Support' class='d-flex align-items-center gap-4'>Developer Support <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/semantic-kernel' title='Semantic Kernel' class='d-flex align-items-center gap-4'>Semantic Kernel <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/powershell-community' title='PowerShell Community' class='d-flex align-items-center gap-4'>PowerShell Community <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/cosmosdb' title='Azure Cosmos DB Blog' class='d-flex align-items-center gap-4'>Azure Cosmos DB Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/azure-sql' title='Azure SQL Devs’ Corner' class='d-flex align-items-center gap-4'>Azure SQL Devs’ Corner <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/nuget' title='The NuGet Blog' class='d-flex align-items-center gap-4'>The NuGet Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/python' title='Python' class='d-flex align-items-center gap-4'>Python <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/identity' title='Microsoft Entra Identity Platform' class='d-flex align-items-center gap-4'>Microsoft Entra Identity Platform <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/ise' title='ISE Developer Blog' class='d-flex align-items-center gap-4'>ISE Developer Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/pix' title='PIX on Windows' class='d-flex align-items-center gap-4'>PIX on Windows <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/ifdef-windows' title='#ifdef Windows' class='d-flex align-items-center gap-4'>#ifdef Windows <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/azuregov' title='Azure Government' class='d-flex align-items-center gap-4'>Azure Government <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/scripting' title='Scripting Blog [archived]' class='d-flex align-items-center gap-4'>Scripting Blog [archived] <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/pfxteam' title='.NET Parallel Programming' class='d-flex align-items-center gap-4'>.NET Parallel Programming <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/java' title='Microsoft for Java Developers' class='d-flex align-items-center gap-4'>Microsoft for Java Developers <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/azure-sdk' title='Azure SDK Blog' class='d-flex align-items-center gap-4'>Azure SDK Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/odata' title='OData' class='d-flex align-items-center gap-4'>OData <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/engineering-at-microsoft' title='Engineering@Microsoft' class='d-flex align-items-center gap-4'>Engineering@Microsoft <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/powerplatform' title='Power Platform Developer Blog' class='d-flex align-items-center gap-4'>Power Platform Developer Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/qsharp' title='Q# Blog' class='d-flex align-items-center gap-4'>Q# Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/dotnet-ch' title='.NET中文官方博客' class='d-flex align-items-center gap-4'>.NET中文官方博客 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/performance-diagnostics' title='Performance and Diagnostics' class='d-flex align-items-center gap-4'>Performance and Diagnostics <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/go' title='Microsoft for Go Developers' class='d-flex align-items-center gap-4'>Microsoft for Go Developers <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/react-native' title='React Native' class='d-flex align-items-center gap-4'>React Native <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/windows-music-dev' title='Windows MIDI and Music dev' class='d-flex align-items-center gap-4'>Windows MIDI and Music dev <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/surface-duo' title='Surface Duo Blog' class='d-flex align-items-center gap-4'>Surface Duo Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/develop-from-the-cloud' title='Develop from the cloud' class='d-flex align-items-center gap-4'>Develop from the cloud <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/azure-notification-hubs' title='Azure Notification Hubs Blog' class='d-flex align-items-center gap-4'>Azure Notification Hubs Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/azure-vm-runtime/' title='Azure VM Runtime Team' class='d-flex align-items-center gap-4'>Azure VM Runtime Team <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/windowsai' title='Windows AI Platform' class='d-flex align-items-center gap-4'>Windows AI Platform <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/java-ch' title='Java Blog in Chinese' class='d-flex align-items-center gap-4'>Java Blog in Chinese <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/azure-depth-platform' title='Azure Depth Platform' class='d-flex align-items-center gap-4'>Azure Depth Platform <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/openapi' title='OpenAPI at Microsoft' class='d-flex align-items-center gap-4'>OpenAPI at Microsoft <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/aspnet' title='ASP.NET Blog' class='d-flex align-items-center gap-4'>ASP.NET Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/ise/' title='CSE Developer Blog' class='d-flex align-items-center gap-4'>CSE Developer Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/all-things-azure/' title='All things Azure' class='d-flex align-items-center gap-4'>All things Azure <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href='https://devblogs.microsoft.com/autogen' title='AutoGen Blog' class='d-flex align-items-center gap-4'>AutoGen Blog <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li></ul></span></div></div><div class="border-bottom mb-16 toggleWrapper"><button class="btn-no-styles w-100 d-flex justify-content-between align-items-center px-8 mb-16 toggleButton" aria-expanded="false" aria-controls="leftContentTopBloggers"><h2 class="fs-20">Resources</h2><div class="toggleIcon d-flex align-items-center"></div></button><div id="leftContentTopBloggers" class="toggleContent px-8 pb-12 mb-16 scroll-bar" style="display: none;"><span class="card-text listdisplay"><div class="resources-section" data-bi-id="landing_page_resources"><ul class=""><li><a href="https://docs.microsoft.com/en-us/" class="d-flex align-items-center gap-4">Microsoft Docs <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li></li><li><a href="https://visualstudio.microsoft.com/" class="d-flex align-items-center gap-4">Visual Studio Products <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href="https://docs.microsoft.com/en-us/learn/">A New Way to Learn <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href="https://developercommunity.visualstudio.com/spaces/8/index.html" class="d-flex align-items-center gap-4">Developer Community <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href="https://learn.microsoft.com/en-us/archive/blogs/" class="d-flex align-items-center gap-4">MSDN / TechNet Blogs <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li></ul></div></span></div></div><div class="border-bottom mb-16 toggleWrapper"><button class="btn-no-styles w-100 d-flex justify-content-between align-items-center px-8 mb-16 toggleButton" aria-expanded="false" aria-controls="leftContentTopBloggers"><h2 class="fs-20">Privacy & FAQ</h2><div class="toggleIcon d-flex align-items-center"></div></button><div class="toggleContent px-8 pb-12 mb-16 scroll-bar" style="display: none;"><span class="card-text listdisplay"><div class="" data-bi-id=""><ul><li><a href="/privacy-on-devblogs" class="d-flex align-items-center gap-4">Privacy on Dev Blogs <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li><li><a href="/faq" class="d-flex align-items-center gap-4">Dev Blogs FAQ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path class="dark-theme" d="M5.64645 3.14645C5.45118 3.34171 5.45118 3.65829 5.64645 3.85355L9.79289 8L5.64645 12.1464C5.45118 12.3417 5.45118 12.6583 5.64645 12.8536C5.84171 13.0488 6.15829 13.0488 6.35355 12.8536L10.8536 8.35355C11.0488 8.15829 11.0488 7.84171 10.8536 7.64645L6.35355 3.14645C6.15829 2.95118 5.84171 2.95118 5.64645 3.14645Z" fill="#424242"/> </svg></a></li></ul></div></span></div></div><div class="rssfeed-section pt-6"><a target="_blank" aria-label="Devblogs RSS Feed" href="https://devblogs.microsoft.com/landing" class="rssfeed-link"><svg xmlns="http://www.w3.org/2000/svg" class="dark-theme-rss" width="24" height="24" viewBox="0 0 24 24" fill="none"> <path class="dark-theme" d="M6.25 3C4.45507 3 3 4.45507 3 6.25V17.75C3 19.5449 4.45507 21 6.25 21H17.75C19.5449 21 21 19.5449 21 17.75V6.25C21 4.45507 19.5449 3 17.75 3H6.25ZM6.75 7.5C6.34494 7.5 6 7.18276 6 6.7777V6.7233C6 6.33021 6.30507 6.00189 6.69816 6.00012L6.75 6C12.9632 6 18 11.0368 18 17.25L17.9999 17.3018C17.9981 17.6949 17.6698 18 17.2767 18H17.2223C16.8172 18 16.5 17.6551 16.5 17.25C16.5 11.8652 12.1348 7.5 6.75 7.5ZM13.294 18H13.2036C12.805 18 12.5 17.6486 12.5 17.25C12.5 14.0744 9.92564 11.5 6.75 11.5C6.35135 11.5 6 11.195 6 10.7964V10.706C6 10.3267 6.2871 10.0048 6.66639 10.0005C6.69422 10.0002 6.72209 10 6.75 10C10.7541 10 14 13.2459 14 17.25C14 17.2779 13.9998 17.3058 13.9995 17.3336C13.9952 17.7129 13.6733 18 13.294 18ZM7.5 18C6.67157 18 6 17.3284 6 16.5C6 15.6716 6.67157 15 7.5 15C8.32843 15 9 15.6716 9 16.5C9 17.3284 8.32843 18 7.5 18Z" fill="#DA3B01"></path> </svg><span>RSS Feed</span></a></div></aside></div> </section> </div> </div><!-- end .wrapper --> </main><!-- end #main --> <style> .clr-resources-bg .container-evo { background-image: var(--img-resources-bg); background-size: 100%; background-position: right bottom; background-repeat: no-repeat; height: 160px; } @media (min-width: 900px) { .clr-resources-bg .container-evo { height: 294px; } } .clr-resources-bg { background: var(--clr-resources-bg); } .c-uhff { margin-top: 0px !important; } </style> <section class="wrapper clr-resources-bg" id="resources" data-bi-area="resources"> <div class="img-resources-bg"> <div class="container-evo"> </div> </div> </section> <!-- Add a hidden dark theme button to trigger the toggle function --> <div style="display:none;"> <div class="login-section c-me d-flex align-items-center"> <a class="login-but d-flex align-items-center" href="https://devblogs.microsoft.com/wp-login.php?redirect_to=https%3A%2F%2Fdevblogs.microsoft.com%2F">Sign in</a> </div> </div><div id="theme-picker" data-bi-name="Switch to dark theme" class="c-me theme-picker d-flex align-items-center"> <button id="theme-picker-button" style="height: 25px; margin-right: 24px;" class="d-flex btn border-r-12" aria-pressed="false" aria-label="Dark theme switch"> <span class="theme-text fs-12 d-flex align-items-center" style="overflow-x: visible;padding: 0px 8px; gap: 8px;"></svg>Theme</span> </button> </div> <script> // Get iframe youtube video length var iframes = jQuery('iframe[src^="https://www.youtube.com/embed/"], iframe[src^="//www.youtube.com/embed/"], iframe[src^="http://www.youtube.com/embed/"], iframe[src^="www.youtube.com/embed/"], iframe[src^="youtube.com/embed/"], iframe[src^="https://www.youtube.com/"]'); var i, len; len = iframes.length; // Country JSON data function funJSONData(countryData) { if (countryData.Country == 'CN') { if (len > 0) { for (var i = 0; i < len; ++i) { var el = iframes[i]; el.parentNode.removeChild(el); } } } } jQuery(document).ready(function () { // Remove youtube videos from page if (len > 0) { jQuery.getJSON('https://uhf.microsoft.com/en/shell/api/mscc?sitename=devblogs&domain=devblogs.microsoft.com&country=detect', function (data) { funJSONData(data); }); } }); </script> <script type="text/javascript" id="commentsvote-js-extra"> /* <![CDATA[ */ var votecommentajax = {"ajaxurl":"https:\/\/devblogs.microsoft.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/plugins/devblogs-comments-evo/admin/js/commentsvote.js?ver=1.1" id="commentsvote-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/plugins/metronet-profile-picture/js/mpp-frontend.js?ver=2.6.3" id="mpp_gutenberg_tabs-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/plugins/network-posts-extended/dist/netposts-pagination.js?ver=1.0" id="netsposts-js-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/plugins/shortcode-toc/assets/vendor/js/anchorific.js?ver=1.0.3" id="anchorific-js"></script> <script type="text/javascript" id="devblogs-evo-scripts-js-extra"> /* <![CDATA[ */ var devblogs_ajax2 = {"ajaxurl":"https:\/\/devblogs.microsoft.com\/wp-admin\/admin-ajax.php"}; var devblogs_ajax_evo = {"ajaxurl":"https:\/\/devblogs.microsoft.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/theme.min.js?ver=1.2.0.1729015445" id="devblogs-evo-scripts-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/custom-theme.min.js?ver=1.1" id="custom-theme-js-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/alert-banner.min.js?ver=1724956583" id="alert-banner-js-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/landing/landing-nav.js?ver=1728407291" id="landing-nav-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/landing/landing-hero.js?ver=1731007193" id="landing-hero-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/theme-picker.min.js?ver=1731007193" id="theme-picker-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/dropdown-menu.min.js?ver=1729185945" id="dropdown-menu-script-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/accordion-toggle.min.js?ver=1727281833" id="accordion-toggle-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/themes/devblogs-evo/js/gifffer.min.js?ver=1.1" id="gifffer-js-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/plugins/wp-featherlight/js/wpFeatherlight.pkgd.min.js?ver=1.3.4" id="wp-featherlight-js"></script> <script type="text/javascript" src="https://devblogs.microsoft.com/wp-content/plugins/devblogs-blocks/assets/highlight.js" id="highlight-script-js"></script> <script type="text/javascript">(function (undefined) {let scriptOptions={"_localizedStrings":{"redirect_overlay_title":"Hold On","redirect_overlay_text":"You are being redirected to another page,<br>it may take a few seconds.","webview_notification_text":"The selected provider doesn't support embedded browsers!"},"_targetWindow":"prefer-popup","_redirectOverlay":"overlay-with-spinner-and-message","_unsupportedWebviewBehavior":""}; /** * Used when Cross-Origin-Opener-Policy blocked the access to the opener. We can't have a reference of the opened windows, so we should attempt to refresh only the windows that has opened popups. */ window._nslHasOpenedPopup = false; window._nslWebViewNoticeElement = null; window.NSLPopup = function (url, title, w, h) { const userAgent = navigator.userAgent, mobile = function () { return /\b(iPhone|iP[ao]d)/.test(userAgent) || /\b(iP[ao]d)/.test(userAgent) || /Android/i.test(userAgent) || /Mobile/i.test(userAgent); }, screenX = window.screenX !== undefined ? window.screenX : window.screenLeft, screenY = window.screenY !== undefined ? window.screenY : window.screenTop, outerWidth = window.outerWidth !== undefined ? window.outerWidth : document.documentElement.clientWidth, outerHeight = window.outerHeight !== undefined ? window.outerHeight : document.documentElement.clientHeight - 22, targetWidth = mobile() ? null : w, targetHeight = mobile() ? null : h, left = parseInt(screenX + (outerWidth - targetWidth) / 2, 10), right = parseInt(screenY + (outerHeight - targetHeight) / 2.5, 10), features = []; if (targetWidth !== null) { features.push('width=' + targetWidth); } if (targetHeight !== null) { features.push('height=' + targetHeight); } features.push('left=' + left); features.push('top=' + right); features.push('scrollbars=1'); const newWindow = window.open(url, title, features.join(',')); if (window.focus) { newWindow.focus(); } window._nslHasOpenedPopup = true; return newWindow; }; let isWebView = null; function checkWebView() { if (isWebView === null) { function _detectOS(ua) { if (/Android/.test(ua)) { return "Android"; } else if (/iPhone|iPad|iPod/.test(ua)) { return "iOS"; } else if (/Windows/.test(ua)) { return "Windows"; } else if (/Mac OS X/.test(ua)) { return "Mac"; } else if (/CrOS/.test(ua)) { return "Chrome OS"; } else if (/Firefox/.test(ua)) { return "Firefox OS"; } return ""; } function _detectBrowser(ua) { let android = /Android/.test(ua); if (/Opera Mini/.test(ua) || / OPR/.test(ua) || / OPT/.test(ua)) { return "Opera"; } else if (/CriOS/.test(ua)) { return "Chrome for iOS"; } else if (/Edge/.test(ua)) { return "Edge"; } else if (android && /Silk\//.test(ua)) { return "Silk"; } else if (/Chrome/.test(ua)) { return "Chrome"; } else if (/Firefox/.test(ua)) { return "Firefox"; } else if (android) { return "AOSP"; } else if (/MSIE|Trident/.test(ua)) { return "IE"; } else if (/Safari\//.test(ua)) { return "Safari"; } else if (/AppleWebKit/.test(ua)) { return "WebKit"; } return ""; } function _detectBrowserVersion(ua, browser) { if (browser === "Opera") { return /Opera Mini/.test(ua) ? _getVersion(ua, "Opera Mini/") : / OPR/.test(ua) ? _getVersion(ua, " OPR/") : _getVersion(ua, " OPT/"); } else if (browser === "Chrome for iOS") { return _getVersion(ua, "CriOS/"); } else if (browser === "Edge") { return _getVersion(ua, "Edge/"); } else if (browser === "Chrome") { return _getVersion(ua, "Chrome/"); } else if (browser === "Firefox") { return _getVersion(ua, "Firefox/"); } else if (browser === "Silk") { return _getVersion(ua, "Silk/"); } else if (browser === "AOSP") { return _getVersion(ua, "Version/"); } else if (browser === "IE") { return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") : /MSIE/.test(ua) ? _getVersion(ua, "MSIE ") : _getVersion(ua, "rv:"); } else if (browser === "Safari") { return _getVersion(ua, "Version/"); } else if (browser === "WebKit") { return _getVersion(ua, "WebKit/"); } return "0.0.0"; } function _getVersion(ua, token) { try { return _normalizeSemverString(ua.split(token)[1].trim().split(/[^\w\.]/)[0]); } catch (o_O) { } return "0.0.0"; } function _normalizeSemverString(version) { const ary = version.split(/[\._]/); return (parseInt(ary[0], 10) || 0) + "." + (parseInt(ary[1], 10) || 0) + "." + (parseInt(ary[2], 10) || 0); } function _isWebView(ua, os, browser, version, options) { switch (os + browser) { case "iOSSafari": return false; case "iOSWebKit": return _isWebView_iOS(options); case "AndroidAOSP": return false; case "AndroidChrome": return parseFloat(version) >= 42 ? /; wv/.test(ua) : /\d{2}\.0\.0/.test(version) ? true : _isWebView_Android(options); } return false; } function _isWebView_iOS(options) { const document = (window["document"] || {}); if ("WEB_VIEW" in options) { return options["WEB_VIEW"]; } return !("fullscreenEnabled" in document || "webkitFullscreenEnabled" in document || false); } function _isWebView_Android(options) { if ("WEB_VIEW" in options) { return options["WEB_VIEW"]; } return !("requestFileSystem" in window || "webkitRequestFileSystem" in window || false); } const options = {}, nav = window.navigator || {}, ua = nav.userAgent || "", os = _detectOS(ua), browser = _detectBrowser(ua), browserVersion = _detectBrowserVersion(ua, browser); isWebView = _isWebView(ua, os, browser, browserVersion, options); } return isWebView; } function isAllowedWebViewForUserAgent(provider) { const facebookAllowedWebViews = [ 'Instagram', 'FBAV', 'FBAN' ]; let whitelist = []; if (provider && provider === 'facebook') { whitelist = facebookAllowedWebViews; } const nav = window.navigator || {}, ua = nav.userAgent || ""; if (whitelist.length && ua.match(new RegExp(whitelist.join('|')))) { return true; } return false; } function disableButtonInWebView(providerButtonElement) { if (providerButtonElement) { providerButtonElement.classList.add('nsl-disabled-provider'); providerButtonElement.setAttribute('href', '#'); providerButtonElement.addEventListener('pointerdown', (e) => { if (!window._nslWebViewNoticeElement) { window._nslWebViewNoticeElement = document.createElement('div'); window._nslWebViewNoticeElement.id = "nsl-notices-fallback"; window._nslWebViewNoticeElement.addEventListener('pointerdown', function (e) { this.parentNode.removeChild(this); window._nslWebViewNoticeElement = null; }); const webviewNoticeHTML = '<div class="error"><p>' + scriptOptions._localizedStrings.webview_notification_text + '</p></div>'; window._nslWebViewNoticeElement.insertAdjacentHTML("afterbegin", webviewNoticeHTML); document.body.appendChild(window._nslWebViewNoticeElement); } }); } } window._nslDOMReady(function () { window.nslRedirect = function (url) { if (scriptOptions._redirectOverlay) { const overlay = document.createElement('div'); overlay.id = "nsl-redirect-overlay"; let overlayHTML = ''; const overlayContainer = "<div id='nsl-redirect-overlay-container'>", overlayContainerClose = "</div>", overlaySpinner = "<div id='nsl-redirect-overlay-spinner'></div>", overlayTitle = "<p id='nsl-redirect-overlay-title'>" + scriptOptions._localizedStrings.redirect_overlay_title + "</p>", overlayText = "<p id='nsl-redirect-overlay-text'>" + scriptOptions._localizedStrings.redirect_overlay_text + "</p>"; switch (scriptOptions._redirectOverlay) { case "overlay-only": break; case "overlay-with-spinner": overlayHTML = overlayContainer + overlaySpinner + overlayContainerClose; break; default: overlayHTML = overlayContainer + overlaySpinner + overlayTitle + overlayText + overlayContainerClose; break; } overlay.insertAdjacentHTML("afterbegin", overlayHTML); document.body.appendChild(overlay); } window.location = url; }; let targetWindow = scriptOptions._targetWindow || 'prefer-popup', lastPopup = false; const buttonLinks = document.querySelectorAll(' a[data-plugin="nsl"][data-action="connect"], a[data-plugin="nsl"][data-action="link"]'); buttonLinks.forEach(function (buttonLink) { buttonLink.addEventListener('click', function (e) { if (lastPopup && !lastPopup.closed) { e.preventDefault(); lastPopup.focus(); } else { let href = this.href, success = false; if (href.indexOf('?') !== -1) { href += '&'; } else { href += '?'; } const redirectTo = this.dataset.redirect; if (redirectTo === 'current') { href += 'redirect=' + encodeURIComponent(window.location.href) + '&'; } else if (redirectTo && redirectTo !== '') { href += 'redirect=' + encodeURIComponent(redirectTo) + '&'; } if (targetWindow !== 'prefer-same-window' && checkWebView()) { targetWindow = 'prefer-same-window'; } if (targetWindow === 'prefer-popup') { lastPopup = NSLPopup(href + 'display=popup', 'nsl-social-connect', this.dataset.popupwidth, this.dataset.popupheight); if (lastPopup) { success = true; e.preventDefault(); } } else if (targetWindow === 'prefer-new-tab') { const newTab = window.open(href + 'display=popup', '_blank'); if (newTab) { if (window.focus) { newTab.focus(); } success = true; window._nslHasOpenedPopup = true; e.preventDefault(); } } if (!success) { window.location = href; e.preventDefault(); } } }); }); let buttonCountChanged = false; const googleLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="google"]'); if (googleLoginButtons.length && checkWebView()) { googleLoginButtons.forEach(function (googleLoginButton) { if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') { disableButtonInWebView(googleLoginButton); } else { googleLoginButton.remove(); buttonCountChanged = true; } }); } const facebookLoginButtons = document.querySelectorAll(' a[data-plugin="nsl"][data-provider="facebook"]'); if (facebookLoginButtons.length && checkWebView() && /Android/.test(window.navigator.userAgent) && !isAllowedWebViewForUserAgent('facebook')) { facebookLoginButtons.forEach(function (facebookLoginButton) { if (scriptOptions._unsupportedWebviewBehavior === 'disable-button') { disableButtonInWebView(facebookLoginButton); } else { facebookLoginButton.remove(); buttonCountChanged = true; } }); } const separators = document.querySelectorAll('div.nsl-separator'); if (buttonCountChanged && separators.length) { separators.forEach(function (separator) { const separatorParentNode = separator.parentNode; if (separatorParentNode) { const separatorButtonContainer = separatorParentNode.querySelector('div.nsl-container-buttons'); if (separatorButtonContainer && !separatorButtonContainer.hasChildNodes()) { separator.remove(); } } }) } }); /** * Cross-Origin-Opener-Policy blocked the access to the opener */ if (typeof BroadcastChannel === "function") { const _nslLoginBroadCastChannel = new BroadcastChannel('nsl_login_broadcast_channel'); _nslLoginBroadCastChannel.onmessage = (event) => { if (window?._nslHasOpenedPopup && event.data?.action === 'redirect') { window._nslHasOpenedPopup = false; const url = event.data?.href; _nslLoginBroadCastChannel.close(); if (typeof window.nslRedirect === 'function') { window.nslRedirect(url); } else { window.opener.location = url; } } }; }})();</script> <!-- Model form for code insert --> <div class="modal fade" id="codeModal" tabindex="-1" role="dialog" aria-labelledby="codeModalLabel" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="codeModalLabel">Code Block</h5> <button type="button" class="close" onclick="myCodeCancelFunction()" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> <form id="myForm" action="#"> <div class="modal-body"> <div class="form-group"> <label for="code-text">Paste your code snippet</label> <textarea class="form-control" id="code-text" style="height: 150px;"></textarea> </div> </div> <div class="modal-footer"> <button type="button" onclick="myCodeFunction()" class="btn btn-primary">Ok</button> <button type="button" name="Cancel" onclick="myCodeCancelFunction()" class="btn btn-secondary" data-dismiss="modal">Cancel</button> </div> </form> </div> </div> </div> <div class="back-comment-buttons" data-bi-area="sidebar"> <style> .evo-right-sidebar { position: fixed !important; right: 10px; bottom: 188px; } .evo-sidebar-button { display: none; visibility: hidden; padding: 0; z-index: 99999; border-radius: 50%; margin-bottom: 1rem; } .evo-sidebar-button:hover { text-decoration: none; } .evo-sidebar-button.active { display: flex; visibility: visible; } .evo-sidebar-button-inner { padding: 5px 8.5px; border-radius: 50%; background: var(--clr-card-bg); box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.14), 0px 0px 2px 0px rgba(0, 0, 0, 0.12); color: var(--clr-landing-navbar); } .evo-sidebar-button-inner i, .evo-sidebar-button-inner i::before { color: var(--clr-landing-navbar); } </style> <div class="evo-right-sidebar"> <a data-bi-id="click back to top of page" data-bi-name="Back to top" href="#page" title="Back to top" aria-label="click back to top of page" class="evo-sidebar-button back-to-top"> <span class="evo-sidebar-button-inner"> <svg width="30" height="30" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M39.5607 32.0607C38.9749 32.6464 38.0251 32.6464 37.4393 32.0607L24 18.6213L10.5607 32.0607C9.97487 32.6464 9.02513 32.6464 8.43934 32.0607C7.85355 31.4749 7.85355 30.5251 8.43934 29.9393L22.9393 15.4393C23.5251 14.8536 24.4749 14.8536 25.0607 15.4393L39.5607 29.9393C40.1464 30.5251 40.1464 31.4749 39.5607 32.0607Z" fill="currentColor"/> </svg> </span> </a> </div> </div> <!-- Usabilla feedback button --> <div id="usabilla-button" class="vscom-usabilla-button"> <a tabindex="0" id="usbl-integrated-button" data-bi-area="sidebar" data-bi-id="Usabilla feedback button" data-bi-name="Usabilla feedback button" href="javascript:" class="vscom-usabilla-link" role="button" onkeypress="if(event.keyCode==32||event.keyCode==13){event.preventDefault();var bt = document.getElementById('usbl-integrated-button');bt.click(event);};"> <p class="vscom-usabilla-text"> Feedback </p> </a> </div> <script type="text/javascript"> /*{literal}<![CDATA[*/ window.lightningjs || function (c) { function g(b, d) { d && (d += (/\?/.test(d) ? "&" : "?") + "lv=1"); c[b] || function () { var i = window, h = document, j = b, g = h.location.protocol, l = "load", k = 0; (function () { function b() { a.P(l); a.w = 1; c[j]("_load") } c[j] = function () { function m() { m.id = e; return c[j].apply(m, arguments) } var b, e = ++k; b = this && this != i ? this.id || 0 : 0; (a.s = a.s || []).push([e, b, arguments]); m.then = function (b, c, h) { var d = a.fh[e] = a.fh[e] || [], j = a.eh[e] = a.eh[e] || [], f = a.ph[e] = a.ph[e] || []; b && d.push(b); c && j.push(c); h && f.push(h); return m }; return m }; var a = c[j]._ = {}; a.fh = {}; a.eh = {}; a.ph = {}; a.l = d ? d.replace(/^\/\//, (g == "https:" ? g : "http:") + "//") : d; a.p = { 0: +new Date }; a.P = function (b) { a.p[b] = new Date - a.p[0] }; a.w && b(); i.addEventListener ? i.addEventListener(l, b, !1) : i.attachEvent("on" + l, b); var q = function () { function b() { return ["<head></head><", c, ' onload="var d=', n, ";d.getElementsByTagName('head')[0].", d, "(d.", g, "('script')).", i, "='", a.l, "'\"></", c, ">"].join("") } var c = "body", e = h[c]; if (!e) return setTimeout(q, 100); a.P(1); var d = "appendChild", g = "createElement", i = "src", k = h[g]("div"), l = k[d](h[g]("div")), f = h[g]("iframe"), n = "document", p; k.style.display = "none"; e.insertBefore(k, e.firstChild).id = o + "-" + j; f.frameBorder = "0"; f.id = o + "-frame-" + j; /MSIE[ ]+6/.test(navigator.userAgent) && (f[i] = "javascript:false"); f.allowTransparency = "true"; l[d](f); try { f.contentWindow[n].open() } catch (s) { a.domain = h.domain, p = "javascript:var d=" + n + ".open();d.domain='" + h.domain + "';", f[i] = p + "void(0);" } try { var r = f.contentWindow[n]; r.write(b()); r.close() } catch (t) { f[i] = p + 'd.write("' + b().replace(/"/g, String.fromCharCode(92) + '"') + '");d.close();' } a.P(2) }; a.l && setTimeout(q, 0) })() }(); c[b].lv = "1"; return c[b] } var o = "lightningjs", k = window[o] = g(o); k.require = g; k.modules = c }({}); if (!navigator.userAgent.match(/Android|BlackBerry|BB10|iPhone|iPad|iPod|Opera Mini|IEMobile/i)) { window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/2a41eea4c9e1.js"); } else { window.usabilla_live = lightningjs.require("usabilla_live", "//w.usabilla.com/29d0684d6043.js"); } window.usabilla_live("hide"); document.getElementById("usbl-integrated-button").addEventListener("click", function () { window.usabilla_live("click"); }); /*]]>{/literal}*/ // Store the element that triggered the modal let triggerElement; jQuery(document).ready(function () { // Hook into Featherlight's beforeOpen event to capture the trigger element jQuery(document).on('click', '[data-featherlight]', function (event) { // Save the element that triggered the Featherlight modal triggerElement = jQuery(this); }); // Hook into the afterClose event to return focus to the trigger element jQuery.featherlight.defaults.afterClose = function () { if (triggerElement) { triggerElement.focus(); // Return focus to the element that triggered the modal } }; }); </script> <!-- UHF footer --> <div id="footerArea" class="uhf" data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'> <div id="footerRegion" data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' > <div id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}' data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter"> <footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/DEV_Blogs/DEV_BlogsFooter, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'> <nav class="c-uhff-nav" aria-label="Footer Resource links" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">What&#39;s new</div> <ul class="c-list f-bare"> <li> <a aria-label="Surface Pro What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-pro-11th-edition" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Pro</a> </li> <li> <a aria-label="Surface Laptop What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/surface/devices/surface-laptop-7th-edition" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop</a> </li> <li> <a aria-label="Surface Laptop Studio 2 What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Studio-2/8rqr54krf1dz" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio2_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio 2</a> </li> <li> <a aria-label="Surface Laptop Go 3 What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/Surface-Laptop-Go-3/8p0wwgj6c6l2" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo3_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 3</a> </li> <li> <a aria-label="Microsoft Copilot What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-copilot" data-m='{"cN":"Footer_WhatsNew_CopilotMicrosoft_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Microsoft Copilot</a> </li> <li> <a aria-label="AI in Windows What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/windows/copilot-ai-features" data-m='{"cN":"Whatsnew_AIinWindows_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>AI in Windows</a> </li> <li> <a aria-label="Explore Microsoft products What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-products-and-apps" data-m='{"cN":"Footer_WhatsNew_ExploreMicrosoftProducts_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Explore Microsoft products</a> </li> <li> <a aria-label="Windows 11 apps What&#39;s new" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}'>Windows 11 apps</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div> <ul class="c-list f-bare"> <li> <a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/returns" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/order-tracking" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Order tracking</a> </li> <li> <a aria-label="Certified Refurbished Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/certified-refurbished-products" data-m='{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Certified Refurbished</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m='{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m='{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}'>Flexible Payments</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Education</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/microsoft-365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Education</a> </li> <li> <a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m='{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>How to buy for your school</a> </li> <li> <a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="c-uhff-link" href="https://azure.microsoft.com/en-us/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure for students</a> </li> </ul> </div> </div> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Business</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/dynamics-365" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business" data-m='{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/power-platform" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a> </li> <li> <a aria-label="Microsoft 365 Copilot Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/copilot/copilot-for-work" data-m='{"cN":"Footer_CopilotMicrosoft365_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Microsoft 365 Copilot</a> </li> <li> <a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Small Business</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Developer &amp; IT</div> <ul class="c-list f-bare"> <li> <a aria-label="Azure Developer &amp; IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Azure</a> </li> <li> <a aria-label="Developer Center Developer &amp; IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_DeveloperCenter_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Developer Center</a> </li> <li> <a aria-label="Documentation Developer &amp; IT" class="c-uhff-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Documentation</a> </li> <li> <a aria-label="Microsoft Learn Developer &amp; IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a> </li> <li> <a aria-label="Microsoft Tech Community Developer &amp; IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer &amp; IT" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer &amp; IT" class="c-uhff-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>AppSource</a> </li> <li> <a aria-label="Visual Studio Developer &amp; IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Company</div> <ul class="c-list f-bare"> <li> <a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://privacy.microsoft.com/en-us" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/" data-m='{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m='{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}'>Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}'>Sustainability</a> </li> </ul> </div> </div> </nav> <div class="c-uhff-base"> <a data-m='{"id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices 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 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 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 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"/> </svg> <span>Your Privacy Choices</span> </a> <noscript> <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>Your Privacy Choices 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 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 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 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"/> </svg> <span>Your Privacy Choices</span> </a> </noscript> <a data-m='{"id":"n9c1c1m1r1a2","sN":9,"aN":"c1c1m1r1a2"}' href="https://go.microsoft.com/fwlink/?linkid=2259814" class="c-uhff-link c-uhff-consumer"> <span>Consumer Health Privacy</span> </a> <nav aria-label="Microsoft corporate links"> <ul class="c-list f-bare" data-m='{"cN":"Corp links_cont","cT":"Container","id":"c10c1c1m1r1a2","sN":10,"aN":"c1c1m1r1a2"}'> <li id="c-uhff-footer_sitemap"> <a class="c-uhff-link" href="https://www.microsoft.com/en-us/sitemap1.aspx" data-mscc-ic="false" data-m='{"cN":"Footer_Sitemap_nav","id":"n1c10c1c1m1r1a2","sN":1,"aN":"c10c1c1m1r1a2"}'>Sitemap</a> </li> <li id="c-uhff-footer_contactus"> <a class="c-uhff-link" href="https://support.microsoft.com/contactus" data-mscc-ic="false" data-m='{"cN":"Footer_ContactUs_nav","id":"n2c10c1c1m1r1a2","sN":2,"aN":"c10c1c1m1r1a2"}'>Contact Microsoft</a> </li> <li id="c-uhff-footer_privacyandcookies"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m='{"cN":"Footer_PrivacyandCookies_nav","id":"n3c10c1c1m1r1a2","sN":3,"aN":"c10c1c1m1r1a2"}'>Privacy </a> </li> <li class=" x-hidden" id="c-uhff-footer_managecookies"> <a class="c-uhff-link" href="#" data-mscc-ic="false" data-m='{"cN":"Footer_ManageCookies_nav","id":"n4c10c1c1m1r1a2","sN":4,"aN":"c10c1c1m1r1a2"}'>Manage cookies</a> </li> <li id="c-uhff-footer_termsofuse"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkID=206977" data-mscc-ic="false" data-m='{"cN":"Footer_TermsOfUse_nav","id":"n5c10c1c1m1r1a2","sN":5,"aN":"c10c1c1m1r1a2"}'>Terms of use</a> </li> <li id="c-uhff-footer_trademarks"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196228" data-mscc-ic="false" data-m='{"cN":"Footer_Trademarks_nav","id":"n6c10c1c1m1r1a2","sN":6,"aN":"c10c1c1m1r1a2"}'>Trademarks</a> </li> <li id="c-uhff-footer_safetyandeco"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196227" data-mscc-ic="false" data-m='{"cN":"Footer_SafetyAndEco_nav","id":"n7c10c1c1m1r1a2","sN":7,"aN":"c10c1c1m1r1a2"}'>Safety &amp; eco</a> </li> <li id="c-uhff-recycling"> <a class="c-uhff-link" href="https://www.microsoft.com/en-us/legal/compliance/recycling" data-mscc-ic="false" data-m='{"cN":"Recycling_nav","id":"n8c10c1c1m1r1a2","sN":8,"aN":"c10c1c1m1r1a2"}'>Recycling</a> </li> <li id="c-uhff-footer_aboutourads"> <a class="c-uhff-link" href="https://choice.microsoft.com" data-mscc-ic="false" data-m='{"cN":"Footer_AboutourAds_nav","id":"n9c10c1c1m1r1a2","sN":9,"aN":"c10c1c1m1r1a2"}'>About our ads</a> </li> <li>&#169; Microsoft 2024</li> </ul> </nav> </div> </footer> <script id="uhf-footer-ccpa"> const globalPrivacyControlEnabled = navigator.globalPrivacyControl; const GPC_DataSharingOptIn = (globalPrivacyControlEnabled) ? false : checkThirdPartyAdsOptOutCookie(); function checkThirdPartyAdsOptOutCookie() { try { const ThirdPartyAdsOptOutCookieName = '3PAdsOptOut'; var cookieValue = getCookie(ThirdPartyAdsOptOutCookieName); return cookieValue != 1; } catch { return true; } } function getCookie(cookieName) { var cookieValue = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)'); return (cookieValue) ? cookieValue[2] : ''; } </script> </div> </div> </div><!--/ UHF footer --> <!-- UHF search functionality query parameter append for all pages excluding landing page --> </body> </html>

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