CINXE.COM
Maoni Archives | .NET Blog
<!DOCTYPE html><html lang="en-US"><head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://devblogs.microsoft.com/dotnet/category/maoni/","20200606165529","https://web.archive.org/","web","/_static/", "1591462529"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><script type="text/javascript">(window.NREUM||(NREUM={})).loader_config={xpid:"VQUEVVBbDRACVFRbAQYCU1c=",licenseKey:"b0106f4dcd",applicationID:"205967553"};window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o||e)},o,o.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(t,e,n){function r(t){try{s.console&&console.log(t)}catch(e){}}var o,i=t("ee"),a=t(25),s={};try{o=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(s.console=!0,o.indexOf("dev")!==-1&&(s.dev=!0),o.indexOf("nr_dev")!==-1&&(s.nrDev=!0))}catch(c){}s.nrDev&&i.on("internal-error",function(t){r(t.stack)}),s.dev&&i.on("fn-err",function(t,e,n){r(n.stack)}),s.dev&&(r("NR AGENT IN DEVELOPMENT MODE"),r("flags: "+a(s,function(t,e){return t}).join(", ")))},{}],2:[function(t,e,n){function r(t,e,n,r,s){try{l?l-=1:o(s||new UncaughtException(t,e,n),!0)}catch(f){try{i("ierr",[f,c.now(),!0])}catch(d){}}return"function"==typeof u&&u.apply(this,a(arguments))}function UncaughtException(t,e,n){this.message=t||"Uncaught error with no additional information",this.sourceURL=e,this.line=n}function o(t,e){var n=e?null:c.now();i("err",[t,n])}var i=t("handle"),a=t(26),s=t("ee"),c=t("loader"),f=t("gos"),u=window.onerror,d=!1,p="nr@seenError",l=0;c.features.err=!0,t(1),window.onerror=r;try{throw new Error}catch(h){"stack"in h&&(t(13),t(12),"addEventListener"in window&&t(6),c.xhrWrappable&&t(14),d=!0)}s.on("fn-start",function(t,e,n){d&&(l+=1)}),s.on("fn-err",function(t,e,n){d&&!n[p]&&(f(n,p,function(){return!0}),this.thrown=!0,o(n))}),s.on("fn-end",function(){d&&!this.thrown&&l>0&&(l-=1)}),s.on("internal-error",function(t){i("ierr",[t,c.now(),!0])})},{}],3:[function(t,e,n){t("loader").features.ins=!0},{}],4:[function(t,e,n){function r(){L++,C=g.hash,this[u]=y.now()}function o(){L--,g.hash!==C&&i(0,!0);var t=y.now();this[h]=~~this[h]+t-this[u],this[d]=t}function i(t,e){E.emit("newURL",[""+g,e])}function a(t,e){t.on(e,function(){this[e]=y.now()})}var s="-start",c="-end",f="-body",u="fn"+s,d="fn"+c,p="cb"+s,l="cb"+c,h="jsTime",m="fetch",v="addEventListener",w=window,g=w.location,y=t("loader");if(w[v]&&y.xhrWrappable){var x=t(10),b=t(11),E=t(8),O=t(6),R=t(13),P=t(7),T=t(14),N=t(9),M=t("ee"),S=M.get("tracer");t(16),y.features.spa=!0;var C,L=0;M.on(u,r),M.on(p,r),M.on(d,o),M.on(l,o),M.buffer([u,d,"xhr-done","xhr-resolved"]),O.buffer([u]),R.buffer(["setTimeout"+c,"clearTimeout"+s,u]),T.buffer([u,"new-xhr","send-xhr"+s]),P.buffer([m+s,m+"-done",m+f+s,m+f+c]),E.buffer(["newURL"]),x.buffer([u]),b.buffer(["propagate",p,l,"executor-err","resolve"+s]),S.buffer([u,"no-"+u]),N.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"]),a(T,"send-xhr"+s),a(M,"xhr-resolved"),a(M,"xhr-done"),a(P,m+s),a(P,m+"-done"),a(N,"new-jsonp"),a(N,"jsonp-end"),a(N,"cb-start"),E.on("pushState-end",i),E.on("replaceState-end",i),w[v]("hashchange",i,!0),w[v]("load",i,!0),w[v]("popstate",function(){i(0,L>1)},!0)}},{}],5:[function(t,e,n){function r(t){}if(window.performance&&window.performance.timing&&window.performance.getEntriesByType){var o=t("ee"),i=t("handle"),a=t(13),s=t(12),c="learResourceTimings",f="addEventListener",u="resourcetimingbufferfull",d="bstResource",p="resource",l="-start",h="-end",m="fn"+l,v="fn"+h,w="bstTimer",g="pushState",y=t("loader");y.features.stn=!0,t(8),"addEventListener"in window&&t(6);var x=NREUM.o.EV;o.on(m,function(t,e){var n=t[0];n instanceof x&&(this.bstStart=y.now())}),o.on(v,function(t,e){var n=t[0];n instanceof x&&i("bst",[n,e,this.bstStart,y.now()])}),a.on(m,function(t,e,n){this.bstStart=y.now(),this.bstType=n}),a.on(v,function(t,e){i(w,[e,this.bstStart,y.now(),this.bstType])}),s.on(m,function(){this.bstStart=y.now()}),s.on(v,function(t,e){i(w,[e,this.bstStart,y.now(),"requestAnimationFrame"])}),o.on(g+l,function(t){this.time=y.now(),this.startPath=location.pathname+location.hash}),o.on(g+h,function(t){i("bstHist",[location.pathname+location.hash,this.startPath,this.time])}),f in window.performance&&(window.performance["c"+c]?window.performance[f](u,function(t){i(d,[window.performance.getEntriesByType(p)]),window.performance["c"+c]()},!1):window.performance[f]("webkit"+u,function(t){i(d,[window.performance.getEntriesByType(p)]),window.performance["webkitC"+c]()},!1)),document[f]("scroll",r,{passive:!0}),document[f]("keypress",r,!1),document[f]("click",r,!1)}},{}],6:[function(t,e,n){function r(t){for(var e=t;e&&!e.hasOwnProperty(u);)e=Object.getPrototypeOf(e);e&&o(e)}function o(t){s.inPlace(t,[u,d],"-",i)}function i(t,e){return t[1]}var a=t("ee").get("events"),s=t("wrap-function")(a,!0),c=t("gos"),f=XMLHttpRequest,u="addEventListener",d="removeEventListener";e.exports=a,"getPrototypeOf"in Object?(r(document),r(window),r(f.prototype)):f.prototype.hasOwnProperty(u)&&(o(window),o(f.prototype)),a.on(u+"-start",function(t,e){var n=t[1],r=c(n,"nr@wrapped",function(){function t(){if("function"==typeof n.handleEvent)return n.handleEvent.apply(n,arguments)}var e={object:t,"function":n}[typeof n];return e?s(e,"fn-",null,e.name||"anonymous"):n});this.wrapped=t[1]=r}),a.on(d+"-start",function(t){t[1]=this.wrapped||t[1]})},{}],7:[function(t,e,n){function r(t,e,n){var r=t[e];"function"==typeof r&&(t[e]=function(){var t=i(arguments),e={};o.emit(n+"before-start",[t],e);var a;e[m]&&e[m].dt&&(a=e[m].dt);var s=r.apply(this,t);return o.emit(n+"start",[t,a],s),s.then(function(t){return o.emit(n+"end",[null,t],s),t},function(t){throw o.emit(n+"end",[t],s),t})})}var o=t("ee").get("fetch"),i=t(26),a=t(25);e.exports=o;var s=window,c="fetch-",f=c+"body-",u=["arrayBuffer","blob","json","text","formData"],d=s.Request,p=s.Response,l=s.fetch,h="prototype",m="nr@context";d&&p&&l&&(a(u,function(t,e){r(d[h],e,f),r(p[h],e,f)}),r(s,"fetch",c),o.on(c+"end",function(t,e){var n=this;if(e){var r=e.headers.get("content-length");null!==r&&(n.rxSize=r),o.emit(c+"done",[null,e],n)}else o.emit(c+"done",[t],n)}))},{}],8:[function(t,e,n){var r=t("ee").get("history"),o=t("wrap-function")(r);e.exports=r;var i=window.history&&window.history.constructor&&window.history.constructor.prototype,a=window.history;i&&i.pushState&&i.replaceState&&(a=i),o.inPlace(a,["pushState","replaceState"],"-")},{}],9:[function(t,e,n){function r(t){function e(){c.emit("jsonp-end",[],p),t.removeEventListener("load",e,!1),t.removeEventListener("error",n,!1)}function n(){c.emit("jsonp-error",[],p),c.emit("jsonp-end",[],p),t.removeEventListener("load",e,!1),t.removeEventListener("error",n,!1)}var r=t&&"string"==typeof t.nodeName&&"script"===t.nodeName.toLowerCase();if(r){var o="function"==typeof t.addEventListener;if(o){var a=i(t.src);if(a){var u=s(a),d="function"==typeof u.parent[u.key];if(d){var p={};f.inPlace(u.parent,[u.key],"cb-",p),t.addEventListener("load",e,!1),t.addEventListener("error",n,!1),c.emit("new-jsonp",[t.src],p)}}}}}function o(){return"addEventListener"in window}function i(t){var e=t.match(u);return e?e[1]:null}function a(t,e){var n=t.match(p),r=n[1],o=n[3];return o?a(o,e[r]):e[r]}function s(t){var e=t.match(d);return e&&e.length>=3?{key:e[2],parent:a(e[1],window)}:{key:t,parent:window}}var c=t("ee").get("jsonp"),f=t("wrap-function")(c);if(e.exports=c,o()){var u=/[?&](?:callback|cb)=([^&#]+)/,d=/(.*)\.([^.]+)/,p=/^(\w+)(\.|$)(.*)$/,l=["appendChild","insertBefore","replaceChild"];Node&&Node.prototype&&Node.prototype.appendChild?f.inPlace(Node.prototype,l,"dom-"):(f.inPlace(HTMLElement.prototype,l,"dom-"),f.inPlace(HTMLHeadElement.prototype,l,"dom-"),f.inPlace(HTMLBodyElement.prototype,l,"dom-")),c.on("dom-start",function(t){r(t[0])})}},{}],10:[function(t,e,n){var r=t("ee").get("mutation"),o=t("wrap-function")(r),i=NREUM.o.MO;e.exports=r,i&&(window.MutationObserver=function(t){return this instanceof i?new i(o(t,"fn-")):i.apply(this,arguments)},MutationObserver.prototype=i.prototype)},{}],11:[function(t,e,n){function r(t){var e=a.context(),n=s(t,"executor-",e),r=new f(n);return a.context(r).getCtx=function(){return e},a.emit("new-promise",[r,e],e),r}function o(t,e){return e}var i=t("wrap-function"),a=t("ee").get("promise"),s=i(a),c=t(25),f=NREUM.o.PR;e.exports=a,f&&(window.Promise=r,["all","race"].forEach(function(t){var e=f[t];f[t]=function(n){function r(t){return function(){a.emit("propagate",[null,!o],i),o=o||!t}}var o=!1;c(n,function(e,n){Promise.resolve(n).then(r("all"===t),r(!1))});var i=e.apply(f,arguments),s=f.resolve(i);return s}}),["resolve","reject"].forEach(function(t){var e=f[t];f[t]=function(t){var n=e.apply(f,arguments);return t!==n&&a.emit("propagate",[t,!0],n),n}}),f.prototype["catch"]=function(t){return this.then(null,t)},f.prototype=Object.create(f.prototype,{constructor:{value:r}}),c(Object.getOwnPropertyNames(f),function(t,e){try{r[e]=f[e]}catch(n){}}),a.on("executor-start",function(t){t[0]=s(t[0],"resolve-",this),t[1]=s(t[1],"resolve-",this)}),a.on("executor-err",function(t,e,n){t[1](n)}),s.inPlace(f.prototype,["then"],"then-",o),a.on("then-start",function(t,e){this.promise=e,t[0]=s(t[0],"cb-",this),t[1]=s(t[1],"cb-",this)}),a.on("then-end",function(t,e,n){this.nextPromise=n;var r=this.promise;a.emit("propagate",[r,!0],n)}),a.on("cb-end",function(t,e,n){a.emit("propagate",[n,!0],this.nextPromise)}),a.on("propagate",function(t,e,n){this.getCtx&&!e||(this.getCtx=function(){if(t instanceof Promise)var e=a.context(t);return e&&e.getCtx?e.getCtx():this})}),r.toString=function(){return""+f})},{}],12:[function(t,e,n){var r=t("ee").get("raf"),o=t("wrap-function")(r),i="equestAnimationFrame";e.exports=r,o.inPlace(window,["r"+i,"mozR"+i,"webkitR"+i,"msR"+i],"raf-"),r.on("raf-start",function(t){t[0]=o(t[0],"fn-")})},{}],13:[function(t,e,n){function r(t,e,n){t[0]=a(t[0],"fn-",null,n)}function o(t,e,n){this.method=n,this.timerDuration=isNaN(t[1])?0:+t[1],t[0]=a(t[0],"fn-",this,n)}var i=t("ee").get("timer"),a=t("wrap-function")(i),s="setTimeout",c="setInterval",f="clearTimeout",u="-start",d="-";e.exports=i,a.inPlace(window,[s,"setImmediate"],s+d),a.inPlace(window,[c],c+d),a.inPlace(window,[f,"clearImmediate"],f+d),i.on(c+u,r),i.on(s+u,o)},{}],14:[function(t,e,n){function r(t,e){d.inPlace(e,["onreadystatechange"],"fn-",s)}function o(){var t=this,e=u.context(t);t.readyState>3&&!e.resolved&&(e.resolved=!0,u.emit("xhr-resolved",[],t)),d.inPlace(t,g,"fn-",s)}function i(t){y.push(t),h&&(b?b.then(a):v?v(a):(E=-E,O.data=E))}function a(){for(var t=0;t<y.length;t++)r([],y[t]);y.length&&(y=[])}function s(t,e){return e}function c(t,e){for(var n in t)e[n]=t[n];return e}t(6);var f=t("ee"),u=f.get("xhr"),d=t("wrap-function")(u),p=NREUM.o,l=p.XHR,h=p.MO,m=p.PR,v=p.SI,w="readystatechange",g=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],y=[];e.exports=u;var x=window.XMLHttpRequest=function(t){var e=new l(t);try{u.emit("new-xhr",[e],e),e.addEventListener(w,o,!1)}catch(n){try{u.emit("internal-error",[n])}catch(r){}}return e};if(c(l,x),x.prototype=l.prototype,d.inPlace(x.prototype,["open","send"],"-xhr-",s),u.on("send-xhr-start",function(t,e){r(t,e),i(e)}),u.on("open-xhr-start",r),h){var b=m&&m.resolve();if(!v&&!m){var E=1,O=document.createTextNode(E);new h(a).observe(O,{characterData:!0})}}else f.on("fn-end",function(t){t[0]&&t[0].type===w||a()})},{}],15:[function(t,e,n){function r(t){if(!i(t))return null;var e=window.NREUM;if(!e.loader_config)return null;var n=(e.loader_config.accountID||"").toString()||null,r=(e.loader_config.agentID||"").toString()||null,s=(e.loader_config.trustKey||"").toString()||null;if(!n||!r)return null;var c=a.generateCatId(),f=a.generateCatId(),u=Date.now(),d=o(c,f,u,n,r,s);return{header:d,guid:c,traceId:f,timestamp:u}}function o(t,e,n,r,o,i){var a="btoa"in window&&"function"==typeof window.btoa;if(!a)return null;var s={v:[0,1],d:{ty:"Browser",ac:r,ap:o,id:t,tr:e,ti:n}};return i&&r!==i&&(s.d.tk=i),btoa(JSON.stringify(s))}function i(t){var e=!1,n=!1,r={};if("init"in NREUM&&"distributed_tracing"in NREUM.init&&(r=NREUM.init.distributed_tracing,n=!!r.enabled),n)if(t.sameOrigin)e=!0;else if(r.allowed_origins instanceof Array)for(var o=0;o<r.allowed_origins.length;o++){var i=s(r.allowed_origins[o]);if(t.hostname===i.hostname&&t.protocol===i.protocol&&t.port===i.port){e=!0;break}}return n&&e}var a=t(23),s=t(17);e.exports={generateTracePayload:r,shouldGenerateTrace:i}},{}],16:[function(t,e,n){function r(t){var e=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var r=0;r<p;r++)t.removeEventListener(d[r],this.listener,!1);e.aborted||(n.duration=a.now()-this.startTime,this.loadCaptureCalled||4!==t.readyState?null==e.status&&(e.status=0):i(this,t),n.cbTime=this.cbTime,u.emit("xhr-done",[t],t),s("xhr",[e,n,this.startTime]))}}function o(t,e){var n=c(e),r=t.params;r.host=n.hostname+":"+n.port,r.pathname=n.pathname,t.parsedOrigin=c(e),t.sameOrigin=t.parsedOrigin.sameOrigin}function i(t,e){t.params.status=e.status;var n=v(e,t.lastSize);if(n&&(t.metrics.rxSize=n),t.sameOrigin){var r=e.getResponseHeader("X-NewRelic-App-Data");r&&(t.params.cat=r.split(", ").pop())}t.loadCaptureCalled=!0}var a=t("loader");if(a.xhrWrappable){var s=t("handle"),c=t(17),f=t(15).generateTracePayload,u=t("ee"),d=["load","error","abort","timeout"],p=d.length,l=t("id"),h=t(21),m=t(20),v=t(18),w=window.XMLHttpRequest;a.features.xhr=!0,t(14),t(7),u.on("new-xhr",function(t){var e=this;e.totalCbs=0,e.called=0,e.cbTime=0,e.end=r,e.ended=!1,e.xhrGuids={},e.lastSize=null,e.loadCaptureCalled=!1,t.addEventListener("load",function(n){i(e,t)},!1),h&&(h>34||h<10)||window.opera||t.addEventListener("progress",function(t){e.lastSize=t.loaded},!1)}),u.on("open-xhr-start",function(t){this.params={method:t[0]},o(this,t[1]),this.metrics={}}),u.on("open-xhr-end",function(t,e){"loader_config"in NREUM&&"xpid"in NREUM.loader_config&&this.sameOrigin&&e.setRequestHeader("X-NewRelic-ID",NREUM.loader_config.xpid);var n=f(this.parsedOrigin);n&&n.header&&(e.setRequestHeader("newrelic",n.header),this.dt=n)}),u.on("send-xhr-start",function(t,e){var n=this.metrics,r=t[0],o=this;if(n&&r){var i=m(r);i&&(n.txSize=i)}this.startTime=a.now(),this.listener=function(t){try{"abort"!==t.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==t.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof e.onload))&&o.end(e)}catch(n){try{u.emit("internal-error",[n])}catch(r){}}};for(var s=0;s<p;s++)e.addEventListener(d[s],this.listener,!1)}),u.on("xhr-cb-time",function(t,e,n){this.cbTime+=t,e?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof n.onload||this.end(n)}),u.on("xhr-load-added",function(t,e){var n=""+l(t)+!!e;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}),u.on("xhr-load-removed",function(t,e){var n=""+l(t)+!!e;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}),u.on("addEventListener-end",function(t,e){e instanceof w&&"load"===t[0]&&u.emit("xhr-load-added",[t[1],t[2]],e)}),u.on("removeEventListener-end",function(t,e){e instanceof w&&"load"===t[0]&&u.emit("xhr-load-removed",[t[1],t[2]],e)}),u.on("fn-start",function(t,e,n){e instanceof w&&("onload"===n&&(this.onload=!0),("load"===(t[0]&&t[0].type)||this.onload)&&(this.xhrCbStart=a.now()))}),u.on("fn-end",function(t,e){this.xhrCbStart&&u.emit("xhr-cb-time",[a.now()-this.xhrCbStart,this.onload,e],e)}),u.on("fetch-before-start",function(t){var e,n=t[1]||{};"string"==typeof t[0]?e=t[0]:t[0]&&t[0].url&&(e=t[0].url),e&&(this.parsedOrigin=c(e),this.sameOrigin=this.parsedOrigin.sameOrigin);var r=f(this.parsedOrigin);if(r&&r.header){var o=r.header;if("string"==typeof t[0]){var i={};for(var a in n)i[a]=n[a];i.headers=new Headers(n.headers||{}),i.headers.set("newrelic",o),this.dt=r,t.length>1?t[1]=i:t.push(i)}else t[0]&&t[0].headers&&(t[0].headers.append("newrelic",o),this.dt=r)}})}},{}],17:[function(t,e,n){var r={};e.exports=function(t){if(t in r)return r[t];var e=document.createElement("a"),n=window.location,o={};e.href=t,o.port=e.port;var i=e.href.split("://");!o.port&&i[1]&&(o.port=i[1].split("/")[0].split("@").pop().split(":")[1]),o.port&&"0"!==o.port||(o.port="https"===i[0]?"443":"80"),o.hostname=e.hostname||n.hostname,o.pathname=e.pathname,o.protocol=i[0],"/"!==o.pathname.charAt(0)&&(o.pathname="/"+o.pathname);var a=!e.protocol||":"===e.protocol||e.protocol===n.protocol,s=e.hostname===document.domain&&e.port===n.port;return o.sameOrigin=a&&(!e.hostname||s),"/"===o.pathname&&(r[t]=o),o}},{}],18:[function(t,e,n){function r(t,e){var n=t.responseType;return"json"===n&&null!==e?e:"arraybuffer"===n||"blob"===n||"json"===n?o(t.response):"text"===n||""===n||void 0===n?o(t.responseText):void 0}var o=t(20);e.exports=r},{}],19:[function(t,e,n){function r(){}function o(t,e,n){return function(){return i(t,[f.now()].concat(s(arguments)),e?null:this,n),e?void 0:this}}var i=t("handle"),a=t(25),s=t(26),c=t("ee").get("tracer"),f=t("loader"),u=NREUM;"undefined"==typeof window.newrelic&&(newrelic=u);var d=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],p="api-",l=p+"ixn-";a(d,function(t,e){u[e]=o(p+e,!0,"api")}),u.addPageAction=o(p+"addPageAction",!0),u.setCurrentRouteName=o(p+"routeName",!0),e.exports=newrelic,u.interaction=function(){return(new r).get()};var h=r.prototype={createTracer:function(t,e){var n={},r=this,o="function"==typeof e;return i(l+"tracer",[f.now(),t,n],r),function(){if(c.emit((o?"":"no-")+"fn-start",[f.now(),r,o],n),o)try{return e.apply(this,arguments)}catch(t){throw c.emit("fn-err",[arguments,this,t],n),t}finally{c.emit("fn-end",[f.now()],n)}}}};a("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(t,e){h[e]=o(l+e)}),newrelic.noticeError=function(t,e){"string"==typeof t&&(t=new Error(t)),i("err",[t,f.now(),!1,e])}},{}],20:[function(t,e,n){e.exports=function(t){if("string"==typeof t&&t.length)return t.length;if("object"==typeof t){if("undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer&&t.byteLength)return t.byteLength;if("undefined"!=typeof Blob&&t instanceof Blob&&t.size)return t.size;if(!("undefined"!=typeof FormData&&t instanceof FormData))try{return JSON.stringify(t).length}catch(e){return}}}},{}],21:[function(t,e,n){var r=0,o=navigator.userAgent.match(/Firefox[\/\s](\d+\.\d+)/);o&&(r=+o[1]),e.exports=r},{}],22:[function(t,e,n){function r(t,e){var n=t.getEntries();n.forEach(function(t){"first-paint"===t.name?c("timing",["fp",Math.floor(t.startTime)]):"first-contentful-paint"===t.name&&c("timing",["fcp",Math.floor(t.startTime)])})}function o(t,e){var n=t.getEntries();n.length>0&&c("lcp",[n[n.length-1]])}function i(t){if(t instanceof u&&!p){var e,n=Math.round(t.timeStamp);e=n>1e12?Date.now()-n:f.now()-n,p=!0,c("timing",["fi",n,{type:t.type,fid:e}])}}if(!("init"in NREUM&&"page_view_timing"in NREUM.init&&"enabled"in NREUM.init.page_view_timing&&NREUM.init.page_view_timing.enabled===!1)){var a,s,c=t("handle"),f=t("loader"),u=NREUM.o.EV;if("PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver){a=new PerformanceObserver(r),s=new PerformanceObserver(o);try{a.observe({entryTypes:["paint"]}),s.observe({entryTypes:["largest-contentful-paint"]})}catch(d){}}if("addEventListener"in document){var p=!1,l=["click","keydown","mousedown","pointerdown","touchstart"];l.forEach(function(t){document.addEventListener(t,i,!1)})}}},{}],23:[function(t,e,n){function r(){function t(){return e?15&e[n++]:16*Math.random()|0}var e=null,n=0,r=window.crypto||window.msCrypto;r&&r.getRandomValues&&(e=r.getRandomValues(new Uint8Array(31)));for(var o,i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",a="",s=0;s<i.length;s++)o=i[s],"x"===o?a+=t().toString(16):"y"===o?(o=3&t()|8,a+=o.toString(16)):a+=o;return a}function o(){function t(){return e?15&e[n++]:16*Math.random()|0}var e=null,n=0,r=window.crypto||window.msCrypto;r&&r.getRandomValues&&Uint8Array&&(e=r.getRandomValues(new Uint8Array(31)));for(var o=[],i=0;i<16;i++)o.push(t().toString(16));return o.join("")}e.exports={generateUuid:r,generateCatId:o}},{}],24:[function(t,e,n){function r(t,e){if(!o)return!1;if(t!==o)return!1;if(!e)return!0;if(!i)return!1;for(var n=i.split("."),r=e.split("."),a=0;a<r.length;a++)if(r[a]!==n[a])return!1;return!0}var o=null,i=null,a=/Version\/(\S+)\s+Safari/;if(navigator.userAgent){var s=navigator.userAgent,c=s.match(a);c&&s.indexOf("Chrome")===-1&&s.indexOf("Chromium")===-1&&(o="Safari",i=c[1])}e.exports={agent:o,version:i,match:r}},{}],25:[function(t,e,n){function r(t,e){var n=[],r="",i=0;for(r in t)o.call(t,r)&&(n[i]=e(r,t[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],26:[function(t,e,n){function r(t,e,n){e||(e=0),"undefined"==typeof n&&(n=t?t.length:0);for(var r=-1,o=n-e||0,i=Array(o<0?0:o);++r<o;)i[r]=t[e+r];return i}e.exports=r},{}],27:[function(t,e,n){e.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(t,e,n){function r(){}function o(t){function e(t){return t&&t instanceof r?t:t?c(t,s,i):i()}function n(n,r,o,i){if(!p.aborted||i){t&&t(n,r,o);for(var a=e(o),s=m(n),c=s.length,f=0;f<c;f++)s[f].apply(a,r);var d=u[y[n]];return d&&d.push([x,n,r,a]),a}}function l(t,e){g[t]=m(t).concat(e)}function h(t,e){var n=g[t];if(n)for(var r=0;r<n.length;r++)n[r]===e&&n.splice(r,1)}function m(t){return g[t]||[]}function v(t){return d[t]=d[t]||o(n)}function w(t,e){f(t,function(t,n){e=e||"feature",y[n]=e,e in u||(u[e]=[])})}var g={},y={},x={on:l,addEventListener:l,removeEventListener:h,emit:n,get:v,listeners:m,context:e,buffer:w,abort:a,aborted:!1};return x}function i(){return new r}function a(){(u.api||u.feature)&&(p.aborted=!0,u=p.backlog={})}var s="nr@context",c=t("gos"),f=t(25),u={},d={},p=e.exports=o();p.backlog=u},{}],gos:[function(t,e,n){function r(t,e,n){if(o.call(t,e))return t[e];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return t[e]=r,r}var o=Object.prototype.hasOwnProperty;e.exports=r},{}],handle:[function(t,e,n){function r(t,e,n,r){o.buffer([t],r),o.emit(t,e,n)}var o=t("ee").get("handle");e.exports=r,r.ee=o},{}],id:[function(t,e,n){function r(t){var e=typeof t;return!t||"object"!==e&&"function"!==e?-1:t===window?0:a(t,i,function(){return o++})}var o=1,i="nr@id",a=t("gos");e.exports=r},{}],loader:[function(t,e,n){function r(){if(!E++){var t=b.info=NREUM.info,e=l.getElementsByTagName("script")[0];if(setTimeout(u.abort,3e4),!(t&&t.licenseKey&&t.applicationID&&e))return u.abort();f(y,function(e,n){t[e]||(t[e]=n)}),c("mark",["onload",a()+b.offset],null,"api");var n=l.createElement("script");n.src="https://"+t.agent,e.parentNode.insertBefore(n,e)}}function o(){"complete"===l.readyState&&i()}function i(){c("mark",["domContent",a()+b.offset],null,"api")}function a(){return O.exists&&performance.now?Math.round(performance.now()):(s=Math.max((new Date).getTime(),s))-b.offset}var s=(new Date).getTime(),c=t("handle"),f=t(25),u=t("ee"),d=t(24),p=window,l=p.document,h="addEventListener",m="attachEvent",v=p.XMLHttpRequest,w=v&&v.prototype;NREUM.o={ST:setTimeout,SI:p.setImmediate,CT:clearTimeout,XHR:v,REQ:p.Request,EV:p.Event,PR:p.Promise,MO:p.MutationObserver};var g=""+location,y={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-spa-1169.min.js"},x=v&&w&&w[h]&&!/CriOS/.test(navigator.userAgent),b=e.exports={offset:s,now:a,origin:g,features:{},xhrWrappable:x,userAgent:d};t(19),t(22),l[h]?(l[h]("DOMContentLoaded",i,!1),p[h]("load",r,!1)):(l[m]("onreadystatechange",o),p[m]("onload",r)),c("mark",["firstbyte",s],null,"api");var E=0,O=t(27)},{}],"wrap-function":[function(t,e,n){function r(t){return!(t&&t instanceof Function&&t.apply&&!t[a])}var o=t("ee"),i=t(26),a="nr@original",s=Object.prototype.hasOwnProperty,c=!1;e.exports=function(t,e){function n(t,e,n,o){function nrWrapper(){var r,a,s,c;try{a=this,r=i(arguments),s="function"==typeof n?n(r,a):n||{}}catch(f){p([f,"",[r,a,o],s])}u(e+"start",[r,a,o],s);try{return c=t.apply(a,r)}catch(d){throw u(e+"err",[r,a,d],s),d}finally{u(e+"end",[r,a,c],s)}}return r(t)?t:(e||(e=""),nrWrapper[a]=t,d(t,nrWrapper),nrWrapper)}function f(t,e,o,i){o||(o="");var a,s,c,f="-"===o.charAt(0);for(c=0;c<e.length;c++)s=e[c],a=t[s],r(a)||(t[s]=n(a,f?s+o:o,i,s))}function u(n,r,o){if(!c||e){var i=c;c=!0;try{t.emit(n,r,o,e)}catch(a){p([a,n,r,o])}c=i}}function d(t,e){if(Object.defineProperty&&Object.keys)try{var n=Object.keys(t);return n.forEach(function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){return t[n]=e,e}})}),e}catch(r){p([r])}for(var o in t)s.call(t,o)&&(e[o]=t[o]);return e}function p(e){try{t.emit("internal-error",e)}catch(n){}}return t||(t=o),n.inPlace=f,n.flag=a,n}},{}]},{},["loader",2,16,5,3,4]);</script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content=".NET Blog - Free. Cross-platform. Open source. A developer platform for building all your apps."><link rel="profile" href="http://gmpg.org/xfn/11"><link rel="pingback" href="https://devblogs.microsoft.com/dotnet/xmlrpc.php"><link media="all" href="https://web.archive.org/web/20200606165529cs_/https://devblogs.microsoft.com/dotnet/wp-content/cache/autoptimize/10/css/autoptimize_4528f22826a2de0b904c6f291dc7e6c3.css" rel="stylesheet"/><title>Maoni Archives | .NET Blog</title><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"/><meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"/><link rel="canonical" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/maoni/"/><meta property="og:locale" content="en_US"/><meta property="og:type" content="article"/><meta property="og:title" content="Maoni Archives | .NET Blog"/><meta property="og:url" content="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/maoni/"/><meta property="og:site_name" content=".NET Blog"/><meta property="og:image" content="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png"/><meta property="og:image:width" content="636"/><meta property="og:image:height" content="300"/><meta name="twitter:card" content="summary_large_image"/> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://web.archive.org/web/20200606165529/https://schema.org","@graph":[{"@type":"WebSite","@id":"https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/#website","url":"https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/","name":".NET Blog","description":"Free. Cross-platform. Open source. A developer platform for building all your apps.","potentialAction":[{"@type":"SearchAction","target":"https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/?s={search_term_string}","query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"CollectionPage","@id":"https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/maoni/#webpage","url":"https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/maoni/","name":"Maoni Archives | .NET Blog","isPartOf":{"@id":"https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/#website"},"inLanguage":"en-US"}]}</script> <link rel="dns-prefetch" href="//web.archive.org/web/20200606165529/https://s.w.org/"/><link rel="alternate" type="application/rss+xml" title=".NET Blog » Feed" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/feed/"/><link rel="alternate" type="application/rss+xml" title=".NET Blog » Comments Feed" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/comments/feed/"/><link rel="alternate" type="application/rss+xml" title=".NET Blog » Maoni Category Feed" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/maoni/feed/"/> <script type="text/javascript">window._wpemojiSettings = {"baseUrl":"https:\/\/web.archive.org\/web\/20200606165529\/https:\/\/s.w.org\/images\/core\/emoji\/12.0.0-1\/72x72\/","ext":".png","svgUrl":"https:\/\/web.archive.org\/web\/20200606165529\/https:\/\/s.w.org\/images\/core\/emoji\/12.0.0-1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/web.archive.org\/web\/20200606165529\/https:\/\/devblogs.microsoft.com\/dotnet\/wp-includes\/js\/wp-emoji-release.min.js"}}; /*! This file is auto-generated */ !function(e,a,t){var r,n,o,i,p=a.createElement("canvas"),s=p.getContext&&p.getContext("2d");function c(e,t){var a=String.fromCharCode;s.clearRect(0,0,p.width,p.height),s.fillText(a.apply(this,e),0,0);var r=p.toDataURL();return s.clearRect(0,0,p.width,p.height),s.fillText(a.apply(this,t),0,0),r===p.toDataURL()}function l(e){if(!s||!s.fillText)return!1;switch(s.textBaseline="top",s.font="600 32px Arial",e){case"flag":return!c([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])&&(!c([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!c([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]));case"emoji":return!c([55357,56424,55356,57342,8205,55358,56605,8205,55357,56424,55356,57340],[55357,56424,55356,57342,8203,55358,56605,8203,55357,56424,55356,57340])}return!1}function d(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(i=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},o=0;o<i.length;o++)t.supports[i[o]]=l(i[o]),t.supports.everything=t.supports.everything&&t.supports[i[o]],"flag"!==i[o]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[i[o]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(r=t.source||{}).concatemoji?d(r.concatemoji):r.wpemoji&&r.twemoji&&(d(r.twemoji),d(r.wpemoji)))}(window,document,window._wpemojiSettings);</script> <script type="text/javascript">(function(a,d){if(a._nsl===d){a._nsl=[];var c=function(){if(a.jQuery===d)setTimeout(c,33);else{for(var b=0;b<a._nsl.length;b++)a._nsl[b].call(a,a.jQuery);a._nsl={push:function(b){b.call(a,a.jQuery)}}}};c()}})(window);</script><script type="text/javascript" src="https://web.archive.org/web/20200606165529js_/https://devblogs.microsoft.com/dotnet/wp-includes/js/jquery/jquery.js"></script> <link rel="https://api.w.org/" href="https://devblogs.microsoft.com/dotnet/wp-json/"/><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://devblogs.microsoft.com/dotnet/xmlrpc.php?rsd"/><link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://devblogs.microsoft.com/dotnet/wp-includes/wlwmanifest.xml"/><link rel="preload" as="style" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-content/plugins/code-prettify/prettify/prettify.css"/><link rel="icon" href="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2018/10/Microsoft-Favicon.png" sizes="32x32"/><link rel="icon" href="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2018/10/Microsoft-Favicon.png" sizes="192x192"/><link rel="apple-touch-icon" href="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2018/10/Microsoft-Favicon.png"/><meta name="msapplication-TileImage" content="https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2018/10/Microsoft-Favicon.png"/> <noscript><style id="rocket-lazyload-nojs-css">.rll-youtube-player, [data-lazy-src]{display:none !important;}</style></noscript> <script>// Standard script supplied by Google (function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', 'https://web.archive.org/web/20200606165529/https://www.google-analytics.com/analytics.js', 'ga'); //check consent var DevblogsConsent = fetchCookie('simaCookie='); console.log('Devconsent= ' + DevblogsConsent); // If clientId is undefined, GA will generate a new Id var storedId = fetchCookie('devblogs_telemetry='); // console.log('storeId= '+storeId); ga('create', 'UA-65691138-1', { 'storage': 'none', 'clientId': storedId }); ga('set', 'dimension1', Date.now()); ga('send', 'pageview'); //if (DevblogsConsent == 'set') { if (DevblogsConsent && storedId) { // Load Google Optimize ga('require', 'GTM-5KLDKLG'); } // If no previous Id was stored, store the new Id that GA generates if (!storedId) { ga(function (tracker) { var id = tracker.get('clientId'); storeId(id); }); } function fetchCookie(pref) { var prefix = pref; var cookies = document.cookie.split(';'); var targetCookie = cookies.find(function (cookie) { return cookie.trim().startsWith(prefix); }); return targetCookie && targetCookie.trim().substring(prefix.length, targetCookie.length); } function storeId(id) { var expires = new Date(); expires.setFullYear(expires.getFullYear() + 1); document.cookie = "devblogs_telemetry=" + id + "; expires=" + expires.toUTCString() + "; path=/"; }</script> </head><body class="archive category category-maoni category-3008 custom-background wp-featherlight-captions group-blog hfeed"> <script src="https://web.archive.org/web/20200606165529js_/https://az725175.vo.msecnd.net/scripts/jsll-4.js" type="text/javascript"></script> <script type="text/javascript">var config = { autoCapture: { lineage: true }, coreData: { appId: "MSDevBlogs" } }; awa.init(config);</script> <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 id="epb" class="x-hidden x-hidden-vp-mobile-st uhfc-universal-context context-uhf" data-m="{"cN":"epb_cont","cT":"Container","id":"c1m1r1a1","sN":1,"aN":"m1r1a1"}"><div class="c-uhfh-alert f-information epb-container theme-light" role="dialog" aria-label="banner" data-m="{"cT":"Container","id":"c1c1m1r1a1","sN":1,"aN":"c1m1r1a1"}" data-pb="[{"Browser":"chrome","ExtensionType":"news","ExtensionUrl":"https://browserdefaults.microsoft.com/extn/redirect/?xid=10&br=gc&channel=uhf&pc=U556","BackgroundColorDarkTheme":"b-black","LogoUrlDarkTheme":"https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4myc9?ver=c8c3","ActionLinkBackgroundColorDarkTheme":"btn-white","BackgroundColorLightTheme":"b-white","LogoUrlLightTheme":"https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4myc9?ver=c8c3","ActionLinkBackgroundColorLightTheme":"btn-red","Title":"Breaking news from around the world","Paragraph":"Get the Microsoft News extension for Chrome","ActionLinkText":"Add it now","ActionLinkAriaLabel":"Add it now","DismissText":"No thanks","DismissAriaLabel":"No thanks","CookieExpiration":"30","CurrentTheme":"theme-light"},{"Browser":"firefox","ExtensionType":"rewards","ExtensionUrl":"https://browserdefaults.microsoft.com/extn/redirect/?xid=6&br=mf&channel=uhf&pc=U564","BackgroundColorDarkTheme":"b-blue","LogoUrlDarkTheme":"https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4mFZT?ver=7321","ActionLinkBackgroundColorDarkTheme":"btn-white","BackgroundColorLightTheme":"b-white","LogoUrlLightTheme":"https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE4mDoE?ver=3feb","ActionLinkBackgroundColorLightTheme":"btn-blue","Title":"Maximize your points with the Microsoft Rewards extension","Paragraph":"Quick access to your daily points and offers","ActionLinkText":"Add it now","ActionLinkAriaLabel":"Add it now","DismissText":"No thanks","DismissAriaLabel":"No thanks","CookieExpiration":"30","CurrentTheme":"theme-light"}]" data-pb-g="true"><div><div class="c-paragraph"> <img alt="" data-src="" src="/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/category/maoni/" class="f-img-lzy"/> <span class="c-text-group pb-content"> <span class="epb-launch pb-content-heading"></span> <span class="epb-text pb-content-text"></span> </span></div> <span class="c-group"> <button id="close-epb" class="c-action-trigger c-action-cancel glyph-cancel" data-m="{"cN":"PB-dismiss_nonnav","id":"nn1c1c1m1r1a1","sN":1,"aN":"c1c1m1r1a1"}"></button> <a id="epbTryNow" href="" target="_blank" class="epb-launch c-action-trigger c-action-open" data-m="{"cN":"PB-launch_nav","id":"n2c1c1m1r1a1","sN":2,"aN":"c1c1m1r1a1"}"></a> </span></div></div></div><div data-m="{"cN":"cookiebanner_cont","cT":"Container","id":"c2c1m1r1a1","sN":2,"aN":"c1m1r1a1"}"><div id="uhfCookieAlert"><div id="msccBanner" dir="ltr" data-site-name="Microsoft.OneRenderFramework.Core" data-mscc-version="0.4.2" data-nver="aspnet-3.1.3" data-sver="0.1.2" class="cc-banner" role="alert" aria-labelledby="msccMessage"><div class="cc-container"><svg class="cc-icon cc-v-center" x="0px" y="0px" viewbox="0 0 44 44" height="30px" fill="none" stroke="currentColor"><circle cx="22" cy="22" r="20" stroke-width="2"></circle><line x1="22" x2="22" y1="18" y2="33" stroke-width="3"></line><line x1="22" x2="22" y1="12" y2="15" stroke-width="3"></line></svg> <span id="msccMessage" class="cc-v-center cc-text" tabindex="0">This site uses cookies for analytics, personalized content and ads. By continuing to browse this site, you agree to this use.</span> <a href="https://web.archive.org/web/20200606165529/https://go.microsoft.com/fwlink/?linkid=845480" target="_top" aria-label="Learn more about Microsoft's Cookie Policy" id="msccLearnMore" class="cc-link cc-v-center cc-float-right" data-mscc-ic="false">Learn more</a></div></div></div></div> <a id="uhfSkipToMain" class="m-skip-to-main" data-href="#mainContent" tabindex="0" data-m="{"cN":"Skip to content_nonnav","id":"nn3c1m1r1a1","sN":3,"aN":"c1m1r1a1"}">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_dotnet, 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":"c4c1m1r1a1","sN":4,"aN":"c1m1r1a1"}"><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":"nn1c4c1m1r1a1","sN":1,"aN":"c4c1m1r1a1"}"></button> <button type="button" class="c-action-trigger c-glyph glyph-arrow-htmllegacy" aria-expanded="false" data-m="{"cN":"Close Search_nonnav","id":"nn2c4c1m1r1a1","sN":2,"aN":"c4c1m1r1a1"}"></button> <a id="uhfLogo" class="c-logo c-sgl-stk-uhfLogo" itemprop="url" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/" aria-label="Microsoft" data-m="{"cN":"GlobalNav_Logo_cont","cT":"Container","id":"c3c4c1m1r1a1","sN":3,"aN":"c4c1m1r1a1"}"> <img alt="" itemprop="logo" itemscope="itemscope" class="c-image" src="https://web.archive.org/web/20200606165529im_/https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE1Mu3b?ver=5c31" role="presentation" aria-hidden="true"/> <span 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":"nn4c4c1m1r1a1","sN":4,"aN":"c4c1m1r1a1"}"></button> <span data-global-title="Microsoft home" class="js-mobile-title">.NET Blog</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":"nn5c4c1m1r1a1","sN":5,"aN":"c4c1m1r1a1"}"></button></div><div class="c-show-pipe x-hidden-vp-mobile-st"> <a id="uhfCatLogo" class="c-logo c-cat-logo" href="/web/20200606165529/https://devblogs.microsoft.com/dotnet/" aria-label=".NET Blog" itemprop="url" data-m="{"cN":"CatNav_.NET Blog_nav","id":"n6c4c1m1r1a1","sN":6,"aN":"c4c1m1r1a1"}"> <span>.NET Blog</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=".NET Blog" data-m="{"cN":".NET Blog_nonnav","id":"nn7c4c1m1r1a1","sN":7,"aN":"c4c1m1r1a1"}"> .NET Blog </button></div><nav id="uhf-g-nav" aria-label="Contextual menu" class="c-uhfh-gnav" data-m="{"cN":"Category nav_cont","cT":"Container","id":"c8c4c1m1r1a1","sN":8,"aN":"c4c1m1r1a1"}"><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="/web/20200606165529/https://devblogs.microsoft.com/dotnet/" data-m="{"cN":"CatNav_Home_nav","id":"n1c8c4c1m1r1a1","sN":1,"aN":"c8c4c1m1r1a1"}"> Home </a></li><li class="single-link js-nav-menu uhf-menu-item"> <a id="DevBlogs" class="c-uhf-nav-link" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/" data-m="{"cN":"CatNav_DevBlogs_nav","id":"n2c8c4c1m1r1a1","sN":2,"aN":"c8c4c1m1r1a1"}">DevBlogs</a></li><li class="nested-menu uhf-menu-item"><div class="c-uhf-menu js-nav-menu"> <button type="button" id="Product Blogs" aria-expanded="false" data-m="{"cN":"CatNav_Product Blogs_nonnav","id":"nn3c8c4c1m1r1a1","sN":3,"aN":"c8c4c1m1r1a1"}">Product Blogs</button><ul class="" data-class-idn="" aria-hidden="true" data-m="{"cN":"Product Blogs_cont","cT":"Container","id":"c4c8c4c1m1r1a1","sN":4,"aN":"c8c4c1m1r1a1"}"><li class="js-nav-menu single-link" data-m="{"cN":"App Center_cont","cT":"Container","id":"c1c4c8c4c1m1r1a1","sN":1,"aN":"c4c8c4c1m1r1a1"}"> <a id="App Center" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/appcenter/" data-m="{"cN":"CatNav_App Center_nav","id":"n1c1c4c8c4c1m1r1a1","sN":1,"aN":"c1c4c8c4c1m1r1a1"}">App Center</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Azure DevOps_cont","cT":"Container","id":"c2c4c8c4c1m1r1a1","sN":2,"aN":"c4c8c4c1m1r1a1"}"> <a id="c-shellmenu_4" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/devops/" data-m="{"cN":"CatNav_Azure DevOps_nav","id":"n1c2c4c8c4c1m1r1a1","sN":1,"aN":"c2c4c8c4c1m1r1a1"}">Azure DevOps</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Visual Studio_cont","cT":"Container","id":"c3c4c8c4c1m1r1a1","sN":3,"aN":"c4c8c4c1m1r1a1"}"> <a id="Visual Studio" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/visualstudio/" data-m="{"cN":"CatNav_Visual Studio_nav","id":"n1c3c4c8c4c1m1r1a1","sN":1,"aN":"c3c4c8c4c1m1r1a1"}">Visual Studio</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Visual Studio Code_cont","cT":"Container","id":"c4c4c8c4c1m1r1a1","sN":4,"aN":"c4c8c4c1m1r1a1"}"> <a id="Visual Studio Code" class="js-subm-uhf-nav-link" href="https://web.archive.org/web/20200606165529/https://code.visualstudio.com/blogs" data-m="{"cN":"CatNav_Visual Studio Code_nav","id":"n1c4c4c8c4c1m1r1a1","sN":1,"aN":"c4c4c8c4c1m1r1a1"}">Visual Studio Code</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Visual Studio for Mac_cont","cT":"Container","id":"c5c4c8c4c1m1r1a1","sN":5,"aN":"c4c8c4c1m1r1a1"}"> <a id="Visual Studio for Mac" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/visualstudio/tag/visual-studio-for-mac/" data-m="{"cN":"CatNav_Visual Studio for Mac_nav","id":"n1c5c4c8c4c1m1r1a1","sN":1,"aN":"c5c4c8c4c1m1r1a1"}">Visual Studio for Mac</a></li></ul></div></li><li class="nested-menu uhf-menu-item"><div class="c-uhf-menu js-nav-menu"> <button type="button" id="DevOps-main" aria-expanded="false" data-m="{"cN":"CatNav_DevOps_nonnav","id":"nn5c8c4c1m1r1a1","sN":5,"aN":"c8c4c1m1r1a1"}">DevOps</button><ul class="" data-class-idn="" aria-hidden="true" data-m="{"cN":"DevOps_cont","cT":"Container","id":"c6c8c4c1m1r1a1","sN":6,"aN":"c8c4c1m1r1a1"}"><li class="js-nav-menu single-link" data-m="{"cN":"Azure Artifacts_cont","cT":"Container","id":"c1c6c8c4c1m1r1a1","sN":1,"aN":"c6c8c4c1m1r1a1"}"> <a id="Azure Artifacts" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/devops/category/package-management/" data-m="{"cN":"CatNav_Azure Artifacts_nav","id":"n1c1c6c8c4c1m1r1a1","sN":1,"aN":"c1c6c8c4c1m1r1a1"}">Azure Artifacts</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Azure Boards_cont","cT":"Container","id":"c2c6c8c4c1m1r1a1","sN":2,"aN":"c6c8c4c1m1r1a1"}"> <a id="Azure Boards" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/devops/category/agile/" data-m="{"cN":"CatNav_Azure Boards_nav","id":"n1c2c6c8c4c1m1r1a1","sN":1,"aN":"c2c6c8c4c1m1r1a1"}">Azure Boards</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Azure Pipelines_cont","cT":"Container","id":"c3c6c8c4c1m1r1a1","sN":3,"aN":"c6c8c4c1m1r1a1"}"> <a id="c-shellmenu_11" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/devops/category/ci/" data-m="{"cN":"CatNav_Azure Pipelines_nav","id":"n1c3c6c8c4c1m1r1a1","sN":1,"aN":"c3c6c8c4c1m1r1a1"}">Azure Pipelines</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Azure Repos_cont","cT":"Container","id":"c4c6c8c4c1m1r1a1","sN":4,"aN":"c6c8c4c1m1r1a1"}"> <a id="c-shellmenu_12" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/devops/category/git/" data-m="{"cN":"CatNav_Azure Repos_nav","id":"n1c4c6c8c4c1m1r1a1","sN":1,"aN":"c4c6c8c4c1m1r1a1"}">Azure Repos</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Azure Test Plans_cont","cT":"Container","id":"c5c6c8c4c1m1r1a1","sN":5,"aN":"c6c8c4c1m1r1a1"}"> <a id="c-shellmenu_13" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/devops/category/testing/" data-m="{"cN":"CatNav_Azure Test Plans_nav","id":"n1c5c6c8c4c1m1r1a1","sN":1,"aN":"c5c6c8c4c1m1r1a1"}">Azure Test Plans</a></li><li class="js-nav-menu single-link" data-m="{"cN":"DevOps_cont","cT":"Container","id":"c6c6c8c4c1m1r1a1","sN":6,"aN":"c6c8c4c1m1r1a1"}"> <a id="DevOps" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/devops/" data-m="{"cN":"CatNav_DevOps_nav","id":"n1c6c6c8c4c1m1r1a1","sN":1,"aN":"c6c6c8c4c1m1r1a1"}">DevOps</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":"nn7c8c4c1m1r1a1","sN":7,"aN":"c8c4c1m1r1a1"}">Languages</button><ul class="" data-class-idn="" aria-hidden="true" data-m="{"cN":"Languages_cont","cT":"Container","id":"c8c8c4c1m1r1a1","sN":8,"aN":"c8c4c1m1r1a1"}"><li class="js-nav-menu single-link" data-m="{"cN":"C++_cont","cT":"Container","id":"c1c8c8c4c1m1r1a1","sN":1,"aN":"c8c8c4c1m1r1a1"}"> <a id="c-shellmenu_16" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/cppblog/" data-m="{"cN":"CatNav_C++_nav","id":"n1c1c8c8c4c1m1r1a1","sN":1,"aN":"c1c8c8c4c1m1r1a1"}">C++</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Java_cont","cT":"Container","id":"c2c8c8c4c1m1r1a1","sN":2,"aN":"c8c8c4c1m1r1a1"}"> <a id="Java" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/java/" data-m="{"cN":"CatNav_Java_nav","id":"n1c2c8c8c4c1m1r1a1","sN":1,"aN":"c2c8c8c4c1m1r1a1"}">Java</a></li><li class="js-nav-menu single-link" data-m="{"cN":"JavaScript_cont","cT":"Container","id":"c3c8c8c4c1m1r1a1","sN":3,"aN":"c8c8c4c1m1r1a1"}"> <a id="JavaScript" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/visualstudio/tag/javascript/" data-m="{"cN":"CatNav_JavaScript_nav","id":"n1c3c8c8c4c1m1r1a1","sN":1,"aN":"c3c8c8c4c1m1r1a1"}">JavaScript</a></li><li class="js-nav-menu single-link" data-m="{"cN":"PowerShell_cont","cT":"Container","id":"c4c8c8c4c1m1r1a1","sN":4,"aN":"c8c8c4c1m1r1a1"}"> <a id="c-shellmenu_19" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/powershell/" data-m="{"cN":"CatNav_PowerShell_nav","id":"n1c4c8c8c4c1m1r1a1","sN":1,"aN":"c4c8c8c4c1m1r1a1"}">PowerShell</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Python_cont","cT":"Container","id":"c5c8c8c4c1m1r1a1","sN":5,"aN":"c8c8c4c1m1r1a1"}"> <a id="Python" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/python/" data-m="{"cN":"CatNav_Python_nav","id":"n1c5c8c8c4c1m1r1a1","sN":1,"aN":"c5c8c8c4c1m1r1a1"}">Python</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Q#_cont","cT":"Container","id":"c6c8c8c4c1m1r1a1","sN":6,"aN":"c8c8c4c1m1r1a1"}"> <a id="c-shellmenu_21" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/qsharp/" data-m="{"cN":"CatNav_Q#_nav","id":"n1c6c8c8c4c1m1r1a1","sN":1,"aN":"c6c8c8c4c1m1r1a1"}">Q#</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Scripting_cont","cT":"Container","id":"c7c8c8c4c1m1r1a1","sN":7,"aN":"c8c8c4c1m1r1a1"}"> <a id="c-shellmenu_22" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/scripting/" data-m="{"cN":"CatNav_Scripting_nav","id":"n1c7c8c8c4c1m1r1a1","sN":1,"aN":"c7c8c8c4c1m1r1a1"}">Scripting</a></li><li class="js-nav-menu single-link" data-m="{"cN":"TypeScript_cont","cT":"Container","id":"c8c8c8c4c1m1r1a1","sN":8,"aN":"c8c8c4c1m1r1a1"}"> <a id="TypeScript" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/typescript/" data-m="{"cN":"CatNav_TypeScript_nav","id":"n1c8c8c8c4c1m1r1a1","sN":1,"aN":"c8c8c8c4c1m1r1a1"}">TypeScript</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Visual Basic_cont","cT":"Container","id":"c9c8c8c4c1m1r1a1","sN":9,"aN":"c8c8c4c1m1r1a1"}"> <a id="Visual Basic" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/vbteam/" data-m="{"cN":"CatNav_Visual Basic_nav","id":"n1c9c8c8c4c1m1r1a1","sN":1,"aN":"c9c8c8c4c1m1r1a1"}">Visual Basic</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Visual C#_cont","cT":"Container","id":"c10c8c8c4c1m1r1a1","sN":10,"aN":"c8c8c4c1m1r1a1"}"> <a id="c-shellmenu_25" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/dotnet/tag/c/" data-m="{"cN":"CatNav_Visual C#_nav","id":"n1c10c8c8c4c1m1r1a1","sN":1,"aN":"c10c8c8c4c1m1r1a1"}">Visual C#</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Visual F#_cont","cT":"Container","id":"c11c8c8c4c1m1r1a1","sN":11,"aN":"c8c8c4c1m1r1a1"}"> <a id="Visual F#" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/dotnet/tag/visual-f/" data-m="{"cN":"CatNav_Visual F#_nav","id":"n1c11c8c8c4c1m1r1a1","sN":1,"aN":"c11c8c8c4c1m1r1a1"}">Visual F#</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_27" aria-expanded="false" data-m="{"cN":"CatNav_.Net_nonnav","id":"nn9c8c4c1m1r1a1","sN":9,"aN":"c8c4c1m1r1a1"}">.NET</button><ul class="" data-class-idn="" aria-hidden="true" data-m="{"cN":".Net_cont","cT":"Container","id":"c10c8c4c1m1r1a1","sN":10,"aN":"c8c4c1m1r1a1"}"><li class="js-nav-menu single-link" data-m="{"cN":".NET_cont","cT":"Container","id":"c1c10c8c4c1m1r1a1","sN":1,"aN":"c10c8c4c1m1r1a1"}"> <a id="c-shellmenu_28" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/dotnet/ " data-m="{"cN":"CatNav_.NET_nav","id":"n1c1c10c8c4c1m1r1a1","sN":1,"aN":"c1c10c8c4c1m1r1a1"}">.NET</a></li><li class="js-nav-menu single-link" data-m="{"cN":"ASP.NET_cont","cT":"Container","id":"c2c10c8c4c1m1r1a1","sN":2,"aN":"c10c8c4c1m1r1a1"}"> <a id="ASP.NET" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/aspnet/" data-m="{"cN":"CatNav_ASP.NET_nav","id":"n1c2c10c8c4c1m1r1a1","sN":1,"aN":"c2c10c8c4c1m1r1a1"}">ASP.NET</a></li><li class="js-nav-menu single-link" data-m="{"cN":"NuGet_cont","cT":"Container","id":"c3c10c8c4c1m1r1a1","sN":3,"aN":"c10c8c4c1m1r1a1"}"> <a id="c-shellmenu_30" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/nuget/" data-m="{"cN":"CatNav_NuGet_nav","id":"n1c3c10c8c4c1m1r1a1","sN":1,"aN":"c3c10c8c4c1m1r1a1"}">NuGet</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Xamarin_cont","cT":"Container","id":"c4c10c8c4c1m1r1a1","sN":4,"aN":"c10c8c4c1m1r1a1"}"> <a id="Xamarin" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/xamarin/" data-m="{"cN":"CatNav_Xamarin_nav","id":"n1c4c10c8c4c1m1r1a1","sN":1,"aN":"c4c10c8c4c1m1r1a1"}">Xamarin</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":"nn11c8c4c1m1r1a1","sN":11,"aN":"c8c4c1m1r1a1"}">Platform Development</button><ul class="" data-class-idn="" aria-hidden="true" data-m="{"cN":"Platform Development_cont","cT":"Container","id":"c12c8c4c1m1r1a1","sN":12,"aN":"c8c4c1m1r1a1"}"><li class="js-nav-menu single-link" data-m="{"cN":"Apps for Windows_cont","cT":"Container","id":"c1c12c8c4c1m1r1a1","sN":1,"aN":"c12c8c4c1m1r1a1"}"> <a id="Apps for Windows" class="js-subm-uhf-nav-link" href="https://web.archive.org/web/20200606165529/http://blogs.windows.com/buildingapps/" data-m="{"cN":"CatNav_Apps for Windows_nav","id":"n1c1c12c8c4c1m1r1a1","sN":1,"aN":"c1c12c8c4c1m1r1a1"}">Apps for Windows</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Azure Government_cont","cT":"Container","id":"c2c12c8c4c1m1r1a1","sN":2,"aN":"c12c8c4c1m1r1a1"}"> <a id="Azure Government" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/azuregov/" data-m="{"cN":"CatNav_Azure Government_nav","id":"n1c2c12c8c4c1m1r1a1","sN":1,"aN":"c2c12c8c4c1m1r1a1"}">Azure Government</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Bing Dev Center_cont","cT":"Container","id":"c3c12c8c4c1m1r1a1","sN":3,"aN":"c12c8c4c1m1r1a1"}"> <a id="Bing Dev Center" class="js-subm-uhf-nav-link" href="https://web.archive.org/web/20200606165529/https://blogs.bing.com/Developers-Blog/" data-m="{"cN":"CatNav_Bing Dev Center_nav","id":"n1c3c12c8c4c1m1r1a1","sN":1,"aN":"c3c12c8c4c1m1r1a1"}">Bing Dev Center</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Command Line_cont","cT":"Container","id":"c4c12c8c4c1m1r1a1","sN":4,"aN":"c12c8c4c1m1r1a1"}"> <a id="Command Line" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/commandline/" data-m="{"cN":"CatNav_Command Line_nav","id":"n1c4c12c8c4c1m1r1a1","sN":1,"aN":"c4c12c8c4c1m1r1a1"}">Command Line</a></li><li class="js-nav-menu single-link" data-m="{"cN":"DirectX Developer Blog_cont","cT":"Container","id":"c5c12c8c4c1m1r1a1","sN":5,"aN":"c12c8c4c1m1r1a1"}"> <a id="c-shellmenu_37" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/directx/" data-m="{"cN":"CatNav_DirectX Developer Blog_nav","id":"n1c5c12c8c4c1m1r1a1","sN":1,"aN":"c5c12c8c4c1m1r1a1"}">DirectX Developer Blog</a></li><li class="js-nav-menu single-link" data-m="{"cN":"IoT Developer_cont","cT":"Container","id":"c6c12c8c4c1m1r1a1","sN":6,"aN":"c12c8c4c1m1r1a1"}"> <a id="c-shellmenu_38" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/iotdev/" data-m="{"cN":"CatNav_IoT Developer_nav","id":"n1c6c12c8c4c1m1r1a1","sN":1,"aN":"c6c12c8c4c1m1r1a1"}">IoT Developer</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Microsoft Edge Dev_cont","cT":"Container","id":"c7c12c8c4c1m1r1a1","sN":7,"aN":"c12c8c4c1m1r1a1"}"> <a id="c-shellmenu_39" class="js-subm-uhf-nav-link" href="https://web.archive.org/web/20200606165529/http://blogs.windows.com/msedgedev/" data-m="{"cN":"CatNav_Microsoft Edge Dev_nav","id":"n1c7c12c8c4c1m1r1a1","sN":1,"aN":"c7c12c8c4c1m1r1a1"}">Microsoft Edge Dev</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Microsoft Azure_cont","cT":"Container","id":"c8c12c8c4c1m1r1a1","sN":8,"aN":"c12c8c4c1m1r1a1"}"> <a id="c-shellmenu_40" class="js-subm-uhf-nav-link" href="https://web.archive.org/web/20200606165529/http://azure.microsoft.com/blog/" data-m="{"cN":"CatNav_Microsoft Azure_nav","id":"n1c8c12c8c4c1m1r1a1","sN":1,"aN":"c8c12c8c4c1m1r1a1"}">Microsoft Azure</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Office 365 Development_cont","cT":"Container","id":"c9c12c8c4c1m1r1a1","sN":9,"aN":"c12c8c4c1m1r1a1"}"> <a id="Office 365 Development" class="js-subm-uhf-nav-link" href="https://web.archive.org/web/20200606165529/http://blogs.office.com/dev?filter=true&filter-product=sharepoint" data-m="{"cN":"CatNav_Office 365 Development_nav","id":"n1c9c12c8c4c1m1r1a1","sN":1,"aN":"c9c12c8c4c1m1r1a1"}">Office 365 Development</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Old New Thing_cont","cT":"Container","id":"c10c12c8c4c1m1r1a1","sN":10,"aN":"c12c8c4c1m1r1a1"}"> <a id="Old New Thing" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/oldnewthing/" data-m="{"cN":"CatNav_Old New Thing_nav","id":"n1c10c12c8c4c1m1r1a1","sN":1,"aN":"c10c12c8c4c1m1r1a1"}">Old New Thing</a></li><li class="js-nav-menu single-link" data-m="{"cN":"PIX on Windows_cont","cT":"Container","id":"c11c12c8c4c1m1r1a1","sN":11,"aN":"c12c8c4c1m1r1a1"}"> <a id="PIX on Windows" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/pix/" data-m="{"cN":"CatNav_PIX on Windows_nav","id":"n1c11c12c8c4c1m1r1a1","sN":1,"aN":"c11c12c8c4c1m1r1a1"}">PIX on Windows</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Premier Developer_cont","cT":"Container","id":"c12c12c8c4c1m1r1a1","sN":12,"aN":"c12c8c4c1m1r1a1"}"> <a id="Premier Developer" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/premier-developer/" data-m="{"cN":"CatNav_Premier Developer_nav","id":"n1c12c12c8c4c1m1r1a1","sN":1,"aN":"c12c12c8c4c1m1r1a1"}">Premier Developer</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Surface Duo_cont","cT":"Container","id":"c13c12c8c4c1m1r1a1","sN":13,"aN":"c12c8c4c1m1r1a1"}"> <a id="surface-duo" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/surface-duo/" data-m="{"cN":"CatNav_Surface Duo_nav","id":"n1c13c12c8c4c1m1r1a1","sN":1,"aN":"c13c12c8c4c1m1r1a1"}">Surface Duo</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Windows Search Platform_cont","cT":"Container","id":"c14c12c8c4c1m1r1a1","sN":14,"aN":"c12c8c4c1m1r1a1"}"> <a id="windows-search-platform" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/windows-search-platform/" data-m="{"cN":"CatNav_Windows Search Platform_nav","id":"n1c14c12c8c4c1m1r1a1","sN":1,"aN":"c14c12c8c4c1m1r1a1"}">Windows Search 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="Data Development" aria-expanded="false" data-m="{"cN":"CatNav_Date Development_nonnav","id":"nn13c8c4c1m1r1a1","sN":13,"aN":"c8c4c1m1r1a1"}">Data Development</button><ul class="" data-class-idn="" aria-hidden="true" data-m="{"cN":"Date Development_cont","cT":"Container","id":"c14c8c4c1m1r1a1","sN":14,"aN":"c8c4c1m1r1a1"}"><li class="js-nav-menu single-link" data-m="{"cN":"Azure Cosmos DB_cont","cT":"Container","id":"c1c14c8c4c1m1r1a1","sN":1,"aN":"c14c8c4c1m1r1a1"}"> <a id="c-shellmenu_48" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/cosmosdb/" data-m="{"cN":"CatNav_Azure Cosmos DB_nav","id":"n1c1c14c8c4c1m1r1a1","sN":1,"aN":"c1c14c8c4c1m1r1a1"}"> Azure Cosmos DB</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Azure SQL_cont","cT":"Container","id":"c2c14c8c4c1m1r1a1","sN":2,"aN":"c14c8c4c1m1r1a1"}"> <a id="Azure SQL" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/azure-sql/" data-m="{"cN":"CatNav_Azure SQL_nav","id":"n1c2c14c8c4c1m1r1a1","sN":1,"aN":"c2c14c8c4c1m1r1a1"}">Azure SQL</a></li><li class="js-nav-menu single-link" data-m="{"cN":"OData_cont","cT":"Container","id":"c3c14c8c4c1m1r1a1","sN":3,"aN":"c14c8c4c1m1r1a1"}"> <a id="OData" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/odata/" data-m="{"cN":"CatNav_OData_nav","id":"n1c3c14c8c4c1m1r1a1","sN":1,"aN":"c3c14c8c4c1m1r1a1"}">OData</a></li><li class="js-nav-menu single-link" data-m="{"cN":"Revolutions R_cont","cT":"Container","id":"c4c14c8c4c1m1r1a1","sN":4,"aN":"c14c8c4c1m1r1a1"}"> <a id="c-shellmenu_51" class="js-subm-uhf-nav-link" href="https://web.archive.org/web/20200606165529/http://blog.revolutionanalytics.com/" data-m="{"cN":"CatNav_Revolutions R_nav","id":"n1c4c14c8c4c1m1r1a1","sN":1,"aN":"c4c14c8c4c1m1r1a1"}">Revolutions R</a></li><li class="js-nav-menu single-link" data-m="{"cN":"SQL Server Data Tools_cont","cT":"Container","id":"c5c14c8c4c1m1r1a1","sN":5,"aN":"c14c8c4c1m1r1a1"}"> <a id="SQL Server Data Tools" class="js-subm-uhf-nav-link" href="/web/20200606165529/https://devblogs.microsoft.com/ssdt/" data-m="{"cN":"CatNav_SQL Server Data Tools_nav","id":"n1c5c14c8c4c1m1r1a1","sN":1,"aN":"c5c14c8c4c1m1r1a1"}">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":"nn15c8c4c1m1r1a1","sN":15,"aN":"c8c4c1m1r1a1"}" 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 no-uhf-actions-exists" data-m="{"cN":"Header actions_cont","cT":"Container","id":"c9c4c1m1r1a1","sN":9,"aN":"c4c1m1r1a1"}"><div class="wf-menu"></div></div></div></div></header></div></div></div><link rel="stylesheet" href="https://web.archive.org/web/20200606165529cs_/https://www.microsoft.com/onerfstatics/marketingsites-eus-prod/west-european/shell/_scrf/css/themes=default.device=uplevel_web_pc/da-4984fd/1c-c84309/e1-5adead/63-110476/a0-ff2952/f8-c4bb56/3b-fcdae1/87-5bf343?ver=2.0" type="text/css" media="all"/><link rel="stylesheet" href="https://web.archive.org/web/20200606165529cs_/https://statics-marketingsites-eus-ms-com.akamaized.net/statics/override.css?c=7" type="text/css"/><link rel="stylesheet" href="https://web.archive.org/web/20200606165529cs_/https://c.s-microsoft.com/mscc/statics/mscc-0.4.2.min.css" type="text/css"/><script src="https://web.archive.org/web/20200606165529js_/https://www.microsoft.com/onerfstatics/marketingsites-eus-prod/shell/_scrf/js/themes=default/54-af9f9f/c0-247156/de-099401/e1-a50eee/e7-954872/d8-97d509/f0-251fe2/46-be1318/77-04a268/11-240c7b/63-077520/a4-34de62/1b-c96630/db-bc0148/dc-7e9864/78-4c7d22/e1-c35781/f0-23b2e3/cd-23d3b0/6d-1e7ed0/b7-cadaa7/ca-40b7b0/4e-ee3a55/3e-f5c39b/c3-6454d7/f9-7592d3/92-10345d/79-499886/7e-cda2d3/db-f3b1fd/93-283c2d/e0-3c9860/91-97a04f/1f-100dea/33-abe4df/4d-6e4c52?ver=2.0&iife=1"></script><script src="https://web.archive.org/web/20200606165529js_/https://c.s-microsoft.com/mscc/statics/mscc-0.4.2.min.js"></script><div class="hfeed site" id="page"><div class="container-fluid"><div class="wrapper" id="index-wrapper" style="padding:0;"><div data-bg="url(https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/dotnet-home-hero-bg-1.png)" class="row justify-content-md-center featuresection rocket-lazyload" id="featuredone" style="opacity:.95;"><div class="container"><div class="row"><div class="col-sm-12 col-md-10 herocontent" style="opacity:100%;"><h1 style="color:#FFFFFF;" class="herotitle text-md-left">.NET Blog</h1><p></p><p style="color:#FFFFFF;" class="herotext text-md-left">Free. Cross-platform. Open source. A developer platform for building all your apps.</p></div><div class="col-sm-12 col-md-2 heroicon"><p class="text-center text-md-right"><img class="alignnone size-full wp-image-407" src="/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/category/maoni/" alt="" width="110" height="110"/></p></div></div></div></div><div class="wrapper" id="archive-wrapper"><div class="container" id="content" tabindex="-1"><header class="page-header" role="region" aria-labeledby="region-heading"><h2 class="page-title rssarchive-title" id="region-heading" style="font-size:1.25rem;">Maoni Archives | .NET Blog<a class="no-underline stayinformedrss" aria-label="Subscribe to RSS Feed" target="_blank" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/maoni/feed/" title="Subscribe to the "Maoni" category" rel="nofollow"><i class="fa fa-rss"></i></a></h2></header><div class="row justify-content-center" id="mainContent"><div class="col-md-12 content-area" id="primary"><main class="site-main" id="main"><div style="clear: both;"></div><article class="post-25661 post type-post status-publish format-standard has-post-thumbnail hentry category-net category-net-core category-net-framework category-dot-net category-maoni category-performance" id="post-25661"><div class="entry-box container"><div class="entry-area row inner-border"><div class="entry-image col-md-4"><img width="636" height="300" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20636%20300'%3E%3C/svg%3E" class="attachment-auto default-featured-img" alt="" data-lazy-srcset="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png 636w, https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform-300x142.png 300w" data-lazy-sizes="(max-width: 636px) 100vw, 636px" data-lazy-src="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png"/><noscript><img width="636" height="300" src="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png" class="attachment-auto default-featured-img" alt="" srcset="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png 636w, https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform-300x142.png 300w" sizes="(max-width: 636px) 100vw, 636px"/></noscript></div><div class="entry-content col-md-8"><header class="entry-header"><h5 class="entry-title"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/gc-perf-infrastructure-part-1/" rel="bookmark">GC Perf Infrastructure – Part 1</a></h5><div class="entry-meta"> <span class="entry-avatar"><img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2036%2036'%3E%3C/svg%3E" width="36" height="36" alt="maoni" class="avatar avatar-36 wp-user-avatar wp-user-avatar-36 alignnone photo" data-lazy-src="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/05/twitter-profile-150x150.jpg"/><noscript><img src="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/05/twitter-profile-150x150.jpg" width="36" height="36" alt="maoni" class="avatar avatar-36 wp-user-avatar wp-user-avatar-36 alignnone photo"/></noscript><span class="entry-author-link"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/author/maoni/" title="Posts by maoni" rel="author">maoni</a></span></span><span class="entry-post-date">December 9, 2019</span><span class="entry-post-date-short">Dec 9, 2019</span><span class="entry-post-date-mini">12/9/19</span></div></header> We open sourced our new GC Perf Infrastructure! It’s now part of the dotnet performance repo. I’ve been meaning to write about it ‘cause some curious minds had been asking when they could use it after I blogged about it last time but didn’t get around to it till now. First of all, let me point out that the target audience of this infr</div></div></div><div style="clear: both;"></div><footer class="entry-footer"></footer></article><article class="post-24439 post type-post status-publish format-standard has-post-thumbnail hentry category-net-core category-gc category-maoni category-performance" id="post-24439"><div class="entry-box container"><div class="entry-area row inner-border"><div class="entry-image col-md-4"><img width="636" height="300" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20636%20300'%3E%3C/svg%3E" class="attachment-auto default-featured-img" alt="" data-lazy-srcset="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png 636w, https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform-300x142.png 300w" data-lazy-sizes="(max-width: 636px) 100vw, 636px" data-lazy-src="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png"/><noscript><img width="636" height="300" src="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png" class="attachment-auto default-featured-img" alt="" srcset="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform.png 636w, https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/02/swimlane-cross-platform-300x142.png 300w" sizes="(max-width: 636px) 100vw, 636px"/></noscript></div><div class="entry-content col-md-8"><header class="entry-header"><h5 class="entry-title"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/gc-perf-infrastructure-part-0/" rel="bookmark">GC Perf Infrastructure – Part 0</a></h5><div class="entry-meta"> <span class="entry-avatar"><img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2036%2036'%3E%3C/svg%3E" width="36" height="36" alt="maoni" class="avatar avatar-36 wp-user-avatar wp-user-avatar-36 alignnone photo" data-lazy-src="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/05/twitter-profile-150x150.jpg"/><noscript><img src="https://web.archive.org/web/20200606165529im_/https://devblogs.microsoft.com/dotnet/wp-content/uploads/sites/10/2019/05/twitter-profile-150x150.jpg" width="36" height="36" alt="maoni" class="avatar avatar-36 wp-user-avatar wp-user-avatar-36 alignnone photo"/></noscript><span class="entry-author-link"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/author/maoni/" title="Posts by maoni" rel="author">maoni</a></span></span><span class="entry-post-date">September 9, 2019</span><span class="entry-post-date-short">Sep 9, 2019</span><span class="entry-post-date-mini">09/9/19</span></div></header> In this blog entry and some future ones I will be showing off functionalities that our new GC perf infrastructure provides. Andy and I have been working on it (he did all the work; I merely played the consultant role). We will be open sourcing it soon and I wanted to give you some examples of using it and you can add these to your repertoire o</div></div></div><div style="clear: both;"></div><footer class="entry-footer"></footer></article></main></div></div></div></div></div><div class="wrapper" id="wrapper-footer" role="main"><div class="container" aria-label="Recommended and Related"><div class="row"><div class="col-lg-4" style="padding-bottom:10px;"><div class="card bottomleft" aria-label="Relevant Links"><div class="card-body" style="height:393px;padding-left:26px;padding-top:24px;padding-right:17px;margin-bottom:24px;"><h5 class="card-title">Relevant Links</h5><div class="card-text listdisplay" style="height:100%;width:100%;overflow-y:auto;overflow-x:hidden;"><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_Download" target="blank" rel="noopener">.NET Download</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_HelloWorld" target="blank" rel="noopener">.NET Hello World</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_CommunityPage" target="blank" rel="noopener">.NET Meetup Events</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_Docs" target="blank" rel="noopener">.NET Documentation</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_APIs" target="blank" rel="noopener">.NET API Browser</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_SDKs" target="blank" rel="noopener">.NET SDKs</a></p><h5>.NET Application Architecture Guides</h5><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/ASP.NET_Architecture_e-book" target="blank" rel="noopener">Web apps with ASP.NET Core</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/Xamarin.Forms_Architecture_e-book" target="blank" rel="noopener">Mobile apps with Xamarin.Forms</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_Microservices_Architecture_e-book" target="blank" rel="noopener">Microservices with Docker Containers</a></p><p><a href="https://web.archive.org/web/20200606165529/https://aka.ms/Modernizing_Existing_.NETApplications_e-book" target="blank" rel="noopener">Modernizing existing .NET apps to the cloud</a></p></div></div></div></div><div class="col-lg-4" style="padding-bottom:10px;"><div class="card bottomcenter" aria-label="Archive"><div class="card-body" style="height:393px;padding-left:26px;padding-top:24px;padding-right:17px;margin-bottom:24px;"><h5 class="card-title">Archive</h5><div class="card-text listdisplay" style="height:100%;width:100%;overflow-y:auto;overflow-x:hidden;"><div role="list"><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2020/05/">May 2020</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2020/04/">April 2020</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2020/03/">March 2020</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2020/02/">February 2020</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2020/01/">January 2020</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/12/">December 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/11/">November 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/10/">October 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/09/">September 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/08/">August 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/07/">July 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/06/">June 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/05/">May 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/04/">April 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/03/">March 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/02/">February 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2019/01/">January 2019</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/12/">December 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/11/">November 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/10/">October 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/09/">September 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/08/">August 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/07/">July 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/06/">June 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/05/">May 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/04/">April 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/03/">March 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/02/">February 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2018/01/">January 2018</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/12/">December 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/11/">November 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/10/">October 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/09/">September 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/08/">August 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/07/">July 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/06/">June 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/05/">May 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/04/">April 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/03/">March 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/02/">February 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2017/01/">January 2017</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/12/">December 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/11/">November 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/10/">October 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/09/">September 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/08/">August 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/07/">July 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/06/">June 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/05/">May 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/04/">April 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/03/">March 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/02/">February 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2016/01/">January 2016</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/12/">December 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/11/">November 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/10/">October 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/09/">September 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/08/">August 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/07/">July 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/05/">May 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/04/">April 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/03/">March 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/02/">February 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2015/01/">January 2015</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/12/">December 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/11/">November 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/10/">October 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/09/">September 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/08/">August 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/07/">July 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/06/">June 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/05/">May 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/04/">April 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/03/">March 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/02/">February 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2014/01/">January 2014</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/12/">December 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/11/">November 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/10/">October 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/09/">September 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/08/">August 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/07/">July 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/06/">June 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/05/">May 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/04/">April 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/02/">February 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2013/01/">January 2013</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/12/">December 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/11/">November 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/10/">October 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/09/">September 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/08/">August 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/07/">July 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/06/">June 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/05/">May 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/04/">April 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/03/">March 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2012/02/">February 2012</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2011/10/">October 2011</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2011/09/">September 2011</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2011/06/">June 2011</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2011/04/">April 2011</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2010/11/">November 2010</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2010/09/">September 2010</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2010/06/">June 2010</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2010/05/">May 2010</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2010/04/">April 2010</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2010/03/">March 2010</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2010/02/">February 2010</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/12/">December 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/11/">November 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/10/">October 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/09/">September 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/08/">August 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/07/">July 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/06/">June 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/05/">May 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/04/">April 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/03/">March 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/02/">February 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2009/01/">January 2009</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2008/11/">November 2008</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2007/05/">May 2007</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2007/03/">March 2007</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2007/01/">January 2007</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/12/">December 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/11/">November 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/10/">October 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/09/">September 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/08/">August 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/06/">June 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/04/">April 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/03/">March 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/02/">February 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2006/01/">January 2006</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2005/10/">October 2005</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2005/07/">July 2005</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2005/05/">May 2005</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2004/12/">December 2004</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2004/11/">November 2004</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2004/09/">September 2004</a></li><li><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/2004/06/">June 2004</a></li></div></div></div></div></div><div class="col-lg-4" style="padding-bottom:10px;"><div class="card bottomright" aria-label="Topics"><div class="card-body" style="height:393px;padding-left:26px;padding-top:24px;padding-right:17px;margin-bottom:24px;"><h5 class="card-title">Topics</h5><div class="card-text listdisplay" style="height:100%;width:100%;overflow-y:auto;overflow-x:hidden;"><div role="list"><li class="cat-item cat-item-1"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/dot-net/">Dot.Net</a></li><li class="cat-item cat-item-685"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/net/">.NET</a></li><li class="cat-item cat-item-196"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/net-core/">.NET Core</a></li><li class="cat-item cat-item-195"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/net-framework/">.NET Framework</a></li><li class="cat-item cat-item-859"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/entity-framework/">Entity Framework</a></li><li class="cat-item cat-item-691"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/ml-net/">ML.NET</a></li><li class="cat-item cat-item-756"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/c/">C#</a></li><li class="cat-item cat-item-636"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/f/">F#</a></li><li class="cat-item cat-item-646"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/visual-studio/">Visual Studio</a></li><li class="cat-item cat-item-509"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/wpf/">WPF</a></li><li class="cat-item cat-item-328"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/aiml/">AI Machine Learning</a></li><li class="cat-item cat-item-3009"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/performance/">Performance</a></li><li class="cat-item cat-item-688"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/machine-learning/">Machine Learning</a></li><li class="cat-item cat-item-326"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/security/">Security</a></li><li class="cat-item cat-item-197"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/asp-net/">ASP.NET</a></li><li class="cat-item cat-item-2904"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/docker/">Docker</a></li><li class="cat-item cat-item-3015"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/concurrency/">Concurrency</a></li><li class="cat-item cat-item-3018"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/tpl/">TPL</a></li><li class="cat-item cat-item-3008"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/maoni/">Maoni</a></li><li class="cat-item cat-item-3013"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/async/">Async</a></li><li class="cat-item cat-item-327"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/azure/">Azure</a></li><li class="cat-item cat-item-6071"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/apache/">Apache</a></li><li class="cat-item cat-item-3007"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/loh/">LOH</a></li><li class="cat-item cat-item-3012"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/net-internals/">.NET Internals</a></li><li class="cat-item cat-item-3017"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/gc/">GC</a></li><li class="cat-item cat-item-489"><a href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/category/xaml/">XAML</a></li></div></div></div></div></div></div></div><div class="container"><div class="row"><div class="col-12"><footer class="site-footer" id="colophon"><div class="row justify-content-center featuresectiontwo"><div class="col-4"></div><div class="col-4"></div></div><div class="row justify-content-center featuresectiontwo"><div class="col-10" style="text-align:center;"><h2 class="stayinformedtitle">Stay informed</h2><div class="col-12" style="margin-top:20px;"><a class="no-underline stayinformedsite" aria-label="Follow Us on Facebook" target="_blank" href="https://web.archive.org/web/20200606165529/https://aka.ms/Dot.NET_Facebook"><i class="fa fa-facebook hvr-pop"></i></a><a class="no-underline stayinformedsite" aria-label="Follow Us on Twitter" target="_blank" href="https://web.archive.org/web/20200606165529/https://aka.ms/DotNET_Twitter"><i class="fa fa-twitter hvr-pop"></i></a><a class="no-underline stayinformedsite" aria-label="Follow Us on YouTube" target="_blank" href="https://web.archive.org/web/20200606165529/https://aka.ms/Dot.NETfdn_YouTube"><i class="fa fa-youtube-play hvr-pop"></i></a><a class="no-underline stayinformedsite" aria-label="Follow Us on Twitch" target="_blank" href="https://web.archive.org/web/20200606165529/https://aka.ms/VisualStudio_Twitch"><i class="fa fa-twitch hvr-pop"></i></a><a class="no-underline stayinformedsite" aria-label="Follow Us on Mixer" target="_blank" href="https://web.archive.org/web/20200606165529/https://aka.ms/VisualStudio_Mixer"><i class="fa fa-times hvr-pop"></i></a><a class="no-underline stayinformedsite" aria-label="Subscribe to Our RSS Feed" target="_blank" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/feed/"><i class="fa fa-rss hvr-pop"></i></a></div></div></div></footer></div></div></div></div></div><div style="display:none;"><div class="login-section"><a class="login-but" href="https://web.archive.org/web/20200606165529/https://devblogs.microsoft.com/dotnet/wp-login.php?redirect_to=https%3A%2F%2Fdevblogs.microsoft.com%2Fdotnet%2Fcategory%2Fmaoni%2F">Login</a></div></div> <script type="text/javascript">var codePrettifyLoaderBaseUrl = "https:\/\/web.archive.org\/web\/20200606165529\/https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/plugins\/code-prettify\/prettify";</script> <script type="text/javascript">var eucookielaw_data = {"euCookieSet":"1","autoBlock":"0","expireTimer":"1080","scrollConsent":"0","networkShareURL":"domain=devblogs.microsoft.com; ","isCookiePage":"","isRefererWebsite":"1","deleteCookieUrl":"https:\/\/web.archive.org\/web\/20200606165529\/https:\/\/devblogs.microsoft.com\/dotnet\/gc-perf-infrastructure-part-1\/?nocookie=1"};</script> <script type="text/javascript">(function (undefined) {var _targetWindow ="prefer-popup"; window.NSLPopupCenter = function (url, title, w, h) { var 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, V = screenX < 0 ? window.screen.width + screenX : screenX, left = parseInt(V + (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'); var newWindow = window.open(url, title, features.join(',')); if (window.focus) { newWindow.focus(); } return newWindow; }; var isWebView = null; function checkWebView() { if (isWebView === null) { function _detectOS(ua) { switch (true) { case /Android/.test(ua): return "Android"; case /iPhone|iPad|iPod/.test(ua): return "iOS"; case /Windows/.test(ua): return "Windows"; case /Mac OS X/.test(ua): return "Mac"; case /CrOS/.test(ua): return "Chrome OS"; case /Firefox/.test(ua): return "Firefox OS"; } return ""; } function _detectBrowser(ua) { var android = /Android/.test(ua); switch (true) { case /CriOS/.test(ua): return "Chrome for iOS"; case /Edge/.test(ua): return "Edge"; case android && /Silk\//.test(ua): return "Silk"; case /Chrome/.test(ua): return "Chrome"; case /Firefox/.test(ua): return "Firefox"; case android: return "AOSP"; case /MSIE|Trident/.test(ua): return "IE"; case /Safari\//.test(ua): return "Safari"; case /AppleWebKit/.test(ua): return "WebKit"; } return ""; } function _detectBrowserVersion(ua, browser) { switch (browser) { case "Chrome for iOS": return _getVersion(ua, "CriOS/"); case "Edge": return _getVersion(ua, "Edge/"); case "Chrome": return _getVersion(ua, "Chrome/"); case "Firefox": return _getVersion(ua, "Firefox/"); case "Silk": return _getVersion(ua, "Silk/"); case "AOSP": return _getVersion(ua, "Version/"); case "IE": return /IEMobile/.test(ua) ? _getVersion(ua, "IEMobile/") : /MSIE/.test(ua) ? _getVersion(ua, "MSIE ") : _getVersion(ua, "rv:"); case "Safari": return _getVersion(ua, "Version/"); case "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) { var 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) { var 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); } var options = {}; var nav = window.navigator || {}; var ua = nav.userAgent || ""; var os = _detectOS(ua); var browser = _detectBrowser(ua); var browserVersion = _detectBrowserVersion(ua, browser); isWebView = _isWebView(ua, os, browser, browserVersion, options); } return isWebView; } window._nsl.push(function ($) { var targetWindow = _targetWindow || 'prefer-popup'; $('a[data-plugin="nsl"][data-action="connect"],a[data-plugin="nsl"][data-action="link"]').on('click', function (e) { var $target = $(this), href = $target.attr('href'), success = false; if (href.indexOf('?') !== -1) { href += '&'; } else { href += '?'; } var redirectTo = $target.data('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') { if (NSLPopupCenter(href + 'display=popup', 'nsl-social-connect', $target.data('popupwidth'), $target.data('popupheight'))) { success = true; e.preventDefault(); } } else if (targetWindow === 'prefer-new-tab') { var newTab = window.open(href + 'display=popup', '_blank'); if (newTab) { if (window.focus) { newTab.focus(); } success = true; e.preventDefault(); } } if (!success) { window.location = href; e.preventDefault(); } }); var googleLoginButton = $('a[data-plugin="nsl"][data-provider="google"]'); if (googleLoginButton.length && checkWebView()) { googleLoginButton.remove(); } });})();</script> <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" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</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></form></div><div class="modal-footer"> <button type="button" class="btn btn-primary" data-dismiss="modal">Cancel</button> <button type="button" onclick="myCodeFunction()" class="btn btn-primary">Ok</button></div></form></div></div></div> <script>window.lazyLoadOptions = { elements_selector: "img[data-lazy-src],.rocket-lazyload,iframe[data-lazy-src]", data_src: "lazy-src", data_srcset: "lazy-srcset", data_sizes: "lazy-sizes", class_loading: "lazyloading", class_loaded: "lazyloaded", threshold: 300, callback_loaded: function(element) { if ( element.tagName === "IFRAME" && element.dataset.rocketLazyload == "fitvidscompatible" ) { if (element.classList.contains("lazyloaded") ) { if (typeof window.jQuery != "undefined") { if (jQuery.fn.fitVids) { jQuery(element).parent().fitVids(); } } } } }}; window.addEventListener('LazyLoad::Initialized', function (e) { var lazyLoadInstance = e.detail.instance; if (window.MutationObserver) { var observer = new MutationObserver(function(mutations) { var image_count = 0; var iframe_count = 0; var rocketlazy_count = 0; mutations.forEach(function(mutation) { for (i = 0; i < mutation.addedNodes.length; i++) { if (typeof mutation.addedNodes[i].getElementsByTagName !== 'function') { return; } if (typeof mutation.addedNodes[i].getElementsByClassName !== 'function') { return; } images = mutation.addedNodes[i].getElementsByTagName('img'); is_image = mutation.addedNodes[i].tagName == "IMG"; iframes = mutation.addedNodes[i].getElementsByTagName('iframe'); is_iframe = mutation.addedNodes[i].tagName == "IFRAME"; rocket_lazy = mutation.addedNodes[i].getElementsByClassName('rocket-lazyload'); image_count += images.length; iframe_count += iframes.length; rocketlazy_count += rocket_lazy.length; if(is_image){ image_count += 1; } if(is_iframe){ iframe_count += 1; } } } ); if(image_count > 0 || iframe_count > 0 || rocketlazy_count > 0){ lazyLoadInstance.update(); } } ); var b = document.getElementsByTagName("body")[0]; var config = { childList: true, subtree: true }; observer.observe(b, config); } }, false);</script><script>function lazyLoadThumb(e){var t='<img loading="lazy" data-lazy-src="https://web.archive.org/web/20200606165529/https://i.ytimg.com/vi/ID/hqdefault.jpg" alt="" width="480" height="360"><noscript><img src="https://web.archive.org/web/20200606165529/https://i.ytimg.com/vi/ID/hqdefault.jpg" alt="" width="480" height="360"></noscript>',a='<div class="play"></div>';return t.replace("ID",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement("iframe"),t="ID?autoplay=1";t+=0===this.dataset.query.length?'':'&'+this.dataset.query;e.setAttribute("src",t.replace("ID",this.dataset.src)),e.setAttribute("frameborder","0"),e.setAttribute("allowfullscreen","1"),e.setAttribute("allow", "accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"),this.parentNode.replaceChild(e,this)}document.addEventListener("DOMContentLoaded",function(){var e,t,a=document.getElementsByClassName("rll-youtube-player");for(t=0;t<a.length;t++)e=document.createElement("div"),e.setAttribute("data-id",a[t].dataset.id),e.setAttribute("data-query", a[t].dataset.query),e.setAttribute("data-src", a[t].dataset.src),e.innerHTML=lazyLoadThumb(a[t].dataset.id),e.onclick=lazyLoadYoutubeIframe,a[t].appendChild(e)});</script> <script type="text/javascript">/*{literal}*/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", "//web.archive.org/web/20200606165529/https://w.usabilla.com/2a41eea4c9e1.js"); } else {window.usabilla_live = lightningjs.require("usabilla_live", "//web.archive.org/web/20200606165529/https://w.usabilla.com/29d0684d6043.js"); }/*{/literal}*/</script> <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">What's new</div><ul class="c-list f-bare"><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/microsoft-365" data-m="{"cN":"Whatsnew_Microsoft365_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}">Microsoft 365</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/p/surface-pro-x/8vdnrp2m6hhc?activetab=overview" data-m="{"cN":"Whatsnew_SurfaceProX_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}">Surface Pro X</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/p/surface-laptop-3/8VFGGH1R94TM?activetab=overview" data-m="{"cN":"Whatsnew_SurfaceLaptop3_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}">Surface Laptop 3</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/p/surface-pro-7/8N17J0M5ZZQS?activetab=overview" data-m="{"cN":"Whatsnew_SurfacePro7_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}">Surface Pro 7</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/windows/windows-10-apps" data-m="{"cN":"Footer_WhatsNew_Windows_10_apps_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}">Windows 10 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">Microsoft Store</div><ul class="c-list f-bare"><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://account.microsoft.com/" data-m="{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}">Account profile</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/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 class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://go.microsoft.com/fwlink/p/?LinkID=824761&clcid=0x409" data-m="{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}">Microsoft Store support</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://go.microsoft.com/fwlink/p/?LinkID=824764&clcid=0x409" data-m="{"cN":"MicrosoftStore_ExtendedHolidayReturns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}">Returns</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://account.microsoft.com/orders" data-m="{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}">Order tracking</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/store/locations/find-a-store?icid=en-us_UF_FAS" data-m="{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}">Store locations</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/store/b/buy-online-pick-up-in-store?icid=uhf_footer_bopuis" data-m="{"cN":"StoreandSupport_BuyOnlinePickUpInStore_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}">Buy online, pick up in store</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/store/locations/events?icid=en_us_store_uhf_events" data-m="{"cN":"StoreSupport_Instoreevents_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}">In-store events</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">Education</div><ul class="c-list f-bare"><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/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 class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/education/products/office/default.aspx" data-m="{"cN":"Footer_Education_OfficeForStudents_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}">Office for students</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://products.office.com/en-us/academic/compare-office-365-education-plans" data-m="{"cN":"Footer_Education_Office365ForSchools_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}">Office 365 for schools</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/store/b/education?icid=CNavfooter_Studentsandeducation" data-m="{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}">Deals for students & parents</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://azure.microsoft.com/en-us/community/education/" data-m="{"cN":"Footer_MicrosoftAzureInEducation_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}">Microsoft Azure in education</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">Enterprise</div><ul class="c-list f-bare"><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://azure.microsoft.com/" data-m="{"cN":"Footer_Enterprise_MicrosoftAzure_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}">Azure</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://go.microsoft.com/fwlink/?LinkID=808093" data-m="{"cN":"Footer_Enterprise_MicrosoftAppSource_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}">AppSource </a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/enterprise/automotive" data-m="{"cN":"Footer_Enterprise_Automotive_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}">Automotive</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/enterprise/government" data-m="{"cN":"Footer_Enterprise_Government_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}">Government</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/enterprise/health" data-m="{"cN":"Footer_Enterprise_Health_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}">Healthcare</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/enterprise/manufacturing" data-m="{"cN":"Footer_Enterprise_Manufacturing_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}">Manufacturing</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/enterprise/financial-services/banking-and-capital-markets" data-m="{"cN":"Footer_Enterprise_FinanciaServices_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}">Financial services</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/enterprise/retail-consumer-goods" data-m="{"cN":"Footer_Enterprise_Retail_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}">Retail</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">Developer</div><ul class="c-list f-bare"><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://visualstudio.microsoft.com/" data-m="{"cN":"Footer_Developer_MicrosoftVisualStudio_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}">Microsoft Visual Studio</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://developer.microsoft.com/en-us/windows" data-m="{"cN":"Footer_Developer_WindowsDevCenter_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}">Windows Dev Center</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://msdn.microsoft.com/en-us" data-m="{"cN":"Footer_Developer_MicrosoftDeveloperNetwork_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}">Developer Network</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://technet.microsoft.com/en-us" data-m="{"cN":"Footer_Developer_TechNet_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}">TechNet</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://developer.microsoft.com/en-us/store/register" data-m="{"cN":"Footer_Developer_MicrosoftDeveloperProgram_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}">Microsoft developer program</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://channel9.msdn.com/" data-m="{"cN":"Footer_Developer_Channel9_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}">Channel 9</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://developer.microsoft.com/en-us/office" data-m="{"cN":"Footer_Developer_OfficeDevCenter_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}">Office Dev Center</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/garage/" data-m="{"cN":"Microsoft Garage_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}">Microsoft Garage</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">Company</div><ul class="c-list f-bare"><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://careers.microsoft.com/" data-m="{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}">Careers</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/about" data-m="{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}">About Microsoft</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://news.microsoft.com/" data-m="{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}">Company news</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/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 class="c-uhff-link" href="https://web.archive.org/web/20200606165529/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 class="c-uhff-link" href="https://web.archive.org/web/20200606165529/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 class="c-uhff-link" href="https://web.archive.org/web/20200606165529/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 class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/security/default.aspx" data-m="{"cN":"Footer_Company_Security_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}">Security</a></li></ul></div></div></nav><div class="c-uhff-base"> <a id="locale-picker-link" aria-label="Content Language Selector. Currently set to English (United States)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/locale.aspx" data-m="{"cN":"locale_picker(US)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}">English (United States)</a><nav aria-label="Microsoft corporate links"><ul class="c-list f-bare" data-m="{"cN":"Corp links_cont","cT":"Container","id":"c8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}"><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/sitemap1.aspx" data-mscc-ic="false" data-m="{"cN":"Footer_Sitemap_nav","id":"n1c8c1c1m1r1a2","sN":1,"aN":"c8c1c1m1r1a2"}">Sitemap</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://support.microsoft.com/en-us/contactus" data-mscc-ic="false" data-m="{"cN":"Footer_ContactUs_nav","id":"n2c8c1c1m1r1a2","sN":2,"aN":"c8c1c1m1r1a2"}">Contact Microsoft</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m="{"cN":"Footer_PrivacyandCookies_nav","id":"n3c8c1c1m1r1a2","sN":3,"aN":"c8c1c1m1r1a2"}">Privacy & cookies </a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://go.microsoft.com/fwlink/?LinkID=206977" data-mscc-ic="false" data-m="{"cN":"Footer_TermsOfUse_nav","id":"n4c8c1c1m1r1a2","sN":4,"aN":"c8c1c1m1r1a2"}">Terms of use</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/trademarks" data-mscc-ic="false" data-m="{"cN":"Footer_Trademarks_nav","id":"n5c8c1c1m1r1a2","sN":5,"aN":"c8c1c1m1r1a2"}">Trademarks</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://www.microsoft.com/en-us/devices/safety-and-eco " data-mscc-ic="false" data-m="{"cN":"Footer_SafetyAndEco_nav","id":"n6c8c1c1m1r1a2","sN":6,"aN":"c8c1c1m1r1a2"}">Safety & eco</a></li><li> <a class="c-uhff-link" href="https://web.archive.org/web/20200606165529/https://choice.microsoft.com/" data-mscc-ic="false" data-m="{"cN":"Footer_AboutourAds_nav","id":"n7c8c1c1m1r1a2","sN":7,"aN":"c8c1c1m1r1a2"}">About our ads</a></li><li>© Microsoft 2020</li></ul></nav></div></footer></div></div></div> <script type="text/javascript">//fix calendar hide when change month var string = window.location.href, substring = "month="; if (string.includes(substring)) { document.getElementById('post-calendar-tab-link').click(); }</script> <script>var nrattr="userNotSignIn"; newrelic.setCustomAttribute('userSign', nrattr );</script> <script defer src="https://web.archive.org/web/20200606165529js_/https://devblogs.microsoft.com/dotnet/wp-content/cache/autoptimize/10/js/autoptimize_4a1236a34f3bcea6980d0dfc52e721f5.js"></script><script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"b0106f4dcd","applicationID":"205967553","transactionName":"YFFQNhYCV0RYVBEKWlkbcwEQClZZFlQEF1BQW0Ab","queueTime":0,"applicationTime":1200,"atts":"TBZTQF4YREo=","errorBeacon":"bam.nr-data.net","agent":""}</script></body></html><!-- FILE ARCHIVED ON 16:55:29 Jun 06, 2020 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 02:38:44 Nov 28, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.763 exclusion.robots: 0.055 exclusion.robots.policy: 0.033 esindex: 0.018 cdx.remote: 45.37 LoadShardBlock: 419.993 (3) PetaboxLoader3.datanode: 139.808 (4) PetaboxLoader3.resolve: 491.29 (2) load_resource: 459.121 -->