[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-38o22ObnZgxrRwN9CBEUD-FUAYrOTtO11O9pn9vUP7w":3,"sanity-OUm_-Bos-yFC-XKT7c8b6ynafS8578nBdTwQBqXswcc":300},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":275},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"f83eb5f0-1237-487f-84d8-f7abf2318c39","2026-06-25T07:40:00.000Z",{"_type":10,"current":11},"slug","code-isnt-causing-your-production-failures",null,"Code isn’t the only thing causing your production failures",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":19},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_id":22,"publishedAt":23,"slug":24,"title":26},"369c2401-b62e-4a37-8ff8-bf603023ecad","2026-03-02T15:03:00.988Z",{"_type":10,"current":25},"what-s-new-at-stack-overflow-march-2026","What’s new at Stack Overflow: March 2026",{"_id":28,"publishedAt":29,"slug":30,"title":32},"5e9053a4-07ea-447c-91ea-29e0b6228537","2026-02-02T15:00:00.000Z",{"_type":10,"current":31},"what-s-new-at-stack-overflow-february-2026","What’s new at Stack Overflow: February 2026",{"_id":34,"publishedAt":35,"slug":36,"title":38},"a1b538eb-a8a6-46d0-80a1-ac70ec9bb935","2026-01-05T10:00:00.000-05:00",{"_type":10,"current":37},"what-s-new-at-stack-overflow-january-2026","What’s new at Stack Overflow: January 2026",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":61,"comments":248,"dateUrl":249,"excerpt":250,"image":251,"legacyBody":254,"product":12,"publishedAt":257,"slug":258,"sponsored":12,"tags":260,"title":274,"visible":248},"2023-05-25T09:37:04Z","wp-post-5129","dgl3SCUzppW3U2LvCoSK4S","blogPost","2023-07-13T14:55:01Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_type":50,"_updatedAt":51,"avatar":52,"employee":57,"name":58,"slug":59},"2023-05-23T16:27:18Z","wp-author-134","dgl3SCUzppW3U2LvCoOzcS","blogAuthor","2023-06-20T15:05:06Z",{"_type":53,"asset":54},"image",{"_ref":55,"_type":56},"image-14f9f468be3c1d5a246e6284dad5cd9efa43a631-1024x1024-png","reference","current","Samo Prelog",{"current":60},"m0sa",[62,184,189],{"_key":63,"_type":64,"children":65,"markDefs":167,"style":183},"db9bde4a2266","block",[66,71,76,80,85,89,94,98,103,107,112,115,120,124,129,133,138,142,146,150,154,158,163],{"_key":67,"_type":68,"marks":69,"text":70},"db9bde4a22660","span",[],"One of the main guidelines at Stack Exchange is that we are open by default. So, I'm excited to announce that we're open-sourcing ",{"_key":72,"_type":68,"marks":73,"text":75},"db9bde4a22661",[74],"b9f6340c2243","StackExchange.Precompilation",{"_key":77,"_type":68,"marks":78,"text":79},"db9bde4a22662",[],", a tool to help you bring faster pre-compile times and Roslyn (DNX inspired) goodies to your ",{"_key":81,"_type":68,"marks":82,"text":84},"db9bde4a22663",[83],"em","old",{"_key":86,"_type":68,"marks":87,"text":88},"db9bde4a22664",[]," ASP.NET MVC 5 project. What does it do, you ask? It replaces the C# compiler with a custom executable (which uses Roslyn), that compiles both your C# source files (.cs) as well as Razor view files (.cshtml) into a single assembly, while allowing you to plug into the compilation (inspired by the ",{"_key":90,"_type":68,"marks":91,"text":93},"db9bde4a22665",[92],"918a34f9a305","DNX metaprogramming capabilities",{"_key":95,"_type":68,"marks":96,"text":97},"db9bde4a22666",[],"). Someone might consider this crazy, but let me give you an idea of why it was the only way to go for us. As we started adding translations to our Q&A engine (",{"_key":99,"_type":68,"marks":100,"text":102},"db9bde4a22667",[101],"1912a492d900","Portuguese",{"_key":104,"_type":68,"marks":105,"text":106},"db9bde4a22668",[],", ",{"_key":108,"_type":68,"marks":109,"text":111},"db9bde4a22669",[110],"3657203c2524","Japanese",{"_key":113,"_type":68,"marks":114,"text":106},"db9bde4a226610",[],{"_key":116,"_type":68,"marks":117,"text":119},"db9bde4a226611",[118],"58f59a445cb7","Russian",{"_key":121,"_type":68,"marks":122,"text":123},"db9bde4a226612",[],"), we noticed dramatic increases in build times. Staging build times sky-rocketed from under 2-minutes to 5+ minutes, which resulted in ",{"_key":125,"_type":68,"marks":126,"text":128},"db9bde4a226613",[127],"14a593bd6a45","a lot of spare time and distraction opportunities",{"_key":130,"_type":68,"marks":131,"text":132},"db9bde4a226614",[]," for team members waiting on a pending deploy to meta, and later production (those deployment build times increased accordingly as well). We tracked down the increased build times to ",{"_key":134,"_type":68,"marks":135,"text":137},"db9bde4a226615",[136],"code","aspnet_compiler.exe",{"_key":139,"_type":68,"marks":140,"text":141},"db9bde4a226616",[],", specifically to how it compiles Razor views. Although the ",{"_key":143,"_type":68,"marks":144,"text":145},"db9bde4a226617",[83],"compilation",{"_key":147,"_type":68,"marks":148,"text":149},"db9bde4a226618",[]," (C# -> IL) is parallel, the ",{"_key":151,"_type":68,"marks":152,"text":153},"db9bde4a226619",[83],"generation",{"_key":155,"_type":68,"marks":156,"text":157},"db9bde4a226620",[]," of C# from Razor views (.cshtml -> C#) is serial. We do a lot of meta-programming to bake translations into our views at (pre-)compile-time (as opposed to doing a lookup for each string at run-time). The only way to make this process fast is by making it parallel, which is unfortunately impossible with ASP.NET MVC 5 tooling. A solution for the problem was created in our localization project. What happened next is I switched from the Core Q&A team to the Careers team (yes, ",{"_key":159,"_type":68,"marks":160,"text":162},"db9bde4a226621",[161],"b6b3277fa698","team switching is a thing at Stack Exchange",{"_key":164,"_type":68,"marks":165,"text":166},"db9bde4a226622",[],") for a while, to reconcile different localization tools used by both teams. StackExchange.Precompilation is the result of packaging Core's \"make-pre-compilation-fast-and-pluggable\" code into a package that we, and now you, can re-use between teams. Here's a nice chart to illustrate what has happened to build times in the past year thanks to optimizing pre-compilation (spoiler: they're back to around 2 minutes):",[168,171,173,175,177,179,181],{"_key":74,"_type":169,"href":170,"reference":12},"link","https://github.com/stackexchange/stackexchange.precompilation",{"_key":92,"_type":169,"href":172,"reference":12},"https://github.com/aspnet/dnx/tree/36369137b00f8c77a67db7afb4338082c6323896/samples/HelloWorld/compiler/preprocess",{"_key":101,"_type":169,"href":174,"reference":12},"http://blog.stackexchange.com/2014/01/ola-mundo-announcing-stack-overflow-in-portuguese/",{"_key":110,"_type":169,"href":176,"reference":12},"http://blog.stackexchange.com/2014/12/stack-overflow-in-japanese/",{"_key":118,"_type":169,"href":178,"reference":12},"http://blog.stackexchange.com/2015/06/welcome-nicolas-chabanovsky-and-stack-overflow-in-russian/",{"_key":127,"_type":169,"href":180,"reference":12},"https://xkcd.com/303/",{"_key":161,"_type":169,"href":182,"reference":12},"http://blog.stackexchange.com/2015/07/going-from-mobile-back-to-the-web/","normal",{"_key":185,"_type":53,"alt":186,"asset":187,"markDefs":12},"4cc8117677bc","SE Network Dev - Average Build Times",{"_ref":188,"_type":56},"image-654e97e3389d9cd22667238bd66b90aaebb631b1-800x157-png",{"_key":190,"_type":64,"children":191,"markDefs":240,"style":183},"fabf5d119237",[192,196,201,205,209,213,218,222,227,231,236],{"_key":193,"_type":68,"marks":194,"text":195},"fabf5d1192370",[],"Another nice side effect is that our MVC 5 views can now contain C# 6 code in Razor code blocks. And it gets even better! In case you don't need (or want) to pre-compile in each build, the package provides a Roslyn-backed ViewEngine, which gives you the same C# 6 support, at run-time. A future prospect is migrating to ASP.NET 5 and MVC 6, where DNX and the MVC 6 Razor implementation can actually do parallel pre-compilation and meta-programming. When that happens, migrating our localization meta-programming code won't be difficult as the interfaces are ",{"_key":197,"_type":68,"marks":198,"text":200},"fabf5d1192371",[199],"efd0df0f6faa","nearly identical",{"_key":202,"_type":68,"marks":203,"text":204},"fabf5d1192372",[],". Start using the package today by running ",{"_key":206,"_type":68,"marks":207,"text":208},"fabf5d1192373",[136],"Install-Package StackExchange.Precompilation.Build",{"_key":210,"_type":68,"marks":211,"text":212},"fabf5d1192374",[]," in your package manager console. Additional instructions and technical details are available on ",{"_key":214,"_type":68,"marks":215,"text":217},"fabf5d1192375",[216],"5072c2bc565a","GitHub",{"_key":219,"_type":68,"marks":220,"text":221},"fabf5d1192376",[]," and ",{"_key":223,"_type":68,"marks":224,"text":226},"fabf5d1192377",[225],"5521e83fc7a6","NuGet",{"_key":228,"_type":68,"marks":229,"text":230},"fabf5d1192378",[],". If you're looking to do C# projects full-time, check out our ",{"_key":232,"_type":68,"marks":233,"text":235},"fabf5d1192379",[234],"2dbe35bae5cb","C# developer job postings",{"_key":237,"_type":68,"marks":238,"text":239},"fabf5d11923710",[],".",[241,243,244,246],{"_key":199,"_type":169,"href":242,"reference":12},"https://github.com/aspnet/dnx/blob/1.0.0-beta2/samples/HelloWorld/compiler/preprocess/HelloMetaProgramming.cs",{"_key":216,"_type":169,"href":170,"reference":12},{"_key":225,"_type":169,"href":245,"reference":12},"https://www.nuget.org/packages/StackExchange.Precompilation.Build",{"_key":234,"_type":169,"href":247,"reference":12},"https://stackoverflow.com/jobs/developer-jobs-using-c%23?utm_source=so-owned&utm_medium=blog&utm_campaign=dev-c4al&utm_content=c4al-link",true,"2015/07/23","",{"_type":53,"asset":252},{"_ref":253,"_type":56},"image-7000664ba930734386dc1b7ea6ddab714099e918-1920x1080-png",{"code":255,"language":256},"One of the main guidelines at Stack Exchange is that we are open by default. So, I'm excited to announce that we're open-sourcing \u003Ca href=\"https://github.com/stackexchange/stackexchange.precompilation\">StackExchange.Precompilation\u003C/a>, a tool to help you bring faster pre-compile times and Roslyn (DNX inspired) goodies to your \u003Cem>old\u003C/em> ASP.NET MVC 5 project.\n\nWhat does it do, you ask? It replaces the C# compiler with a custom executable (which uses Roslyn), that compiles both your C# source files (.cs) as well as Razor view files (.cshtml) into a single assembly, while allowing you to plug into the compilation (inspired by the \u003Ca href=\"https://github.com/aspnet/dnx/tree/36369137b00f8c77a67db7afb4338082c6323896/samples/HelloWorld/compiler/preprocess\">DNX metaprogramming capabilities\u003C/a>).\n\nSomeone might consider this crazy, but let me give you an idea of why it was the only way to go for us. As we started adding translations to our Q&amp;A engine (\u003Ca href=\"http://blog.stackexchange.com/2014/01/ola-mundo-announcing-stack-overflow-in-portuguese/\">Portuguese\u003C/a>, \u003Ca href=\"http://blog.stackexchange.com/2014/12/stack-overflow-in-japanese/\">Japanese\u003C/a>, \u003Ca href=\"http://blog.stackexchange.com/2015/06/welcome-nicolas-chabanovsky-and-stack-overflow-in-russian/\">Russian\u003C/a>), we noticed dramatic increases in build times. Staging build times sky-rocketed from under 2-minutes to 5+ minutes, which resulted in \u003Ca href=\"https://xkcd.com/303/\">a lot of spare time and distraction opportunities\u003C/a> for team members waiting on a pending deploy to meta, and later production (those deployment build times increased accordingly as well). We tracked down the increased build times to \u003Ccode>aspnet_compiler.exe\u003C/code>, specifically to how it compiles Razor views. Although the \u003Cem>compilation\u003C/em> (C# -&gt; IL) is parallel, the \u003Cem>generation\u003C/em> of C# from Razor views (.cshtml -&gt; C#) is serial. We do a lot of meta-programming to bake translations into our views at (pre-)compile-time (as opposed to doing a lookup for each string at run-time). The only way to make this process fast is by making it parallel, which is unfortunately impossible with ASP.NET MVC 5 tooling.\n\nA solution for the problem was created in our localization project. What happened next is I switched from the Core Q&amp;A team to the Careers team (yes, \u003Ca href=\"http://blog.stackexchange.com/2015/07/going-from-mobile-back-to-the-web/\">team switching is a thing at Stack Exchange\u003C/a>) for a while, to reconcile different localization tools used by both teams. StackExchange.Precompilation is the result of packaging Core's \"make-pre-compilation-fast-and-pluggable\" code into a package that we, and now you, can re-use between teams. Here's a nice chart to illustrate what has happened to build times in the past year thanks to optimizing pre-compilation (spoiler: they're back to around 2 minutes):\n\n\u003Cimg src=\"http://stackoverflow.blog/wp-content/uploads/2017/02/z6Yzx.png\" alt=\"SE Network Dev - Average Build Times\" />\n\nAnother nice side effect is that our MVC 5 views can now contain C# 6 code in Razor code blocks. And it gets even better! In case you don't need (or want) to pre-compile in each build, the package provides a Roslyn-backed ViewEngine, which gives you the same C# 6 support, at run-time.\n\nA future prospect is migrating to ASP.NET 5 and MVC 6, where DNX and the MVC 6 Razor implementation can actually do parallel pre-compilation and meta-programming. When that happens, migrating our localization meta-programming code won't be difficult as the interfaces are \u003Ca href=\"https://github.com/aspnet/dnx/blob/1.0.0-beta2/samples/HelloWorld/compiler/preprocess/HelloMetaProgramming.cs\">nearly identical\u003C/a>.\n\nStart using the package today by running \u003Ccode>Install-Package StackExchange.Precompilation.Build\u003C/code> in your package manager console. Additional instructions and technical details are available on \u003Ca href=\"https://github.com/stackexchange/stackexchange.precompilation\">GitHub\u003C/a> and \u003Ca href=\"https://www.nuget.org/packages/StackExchange.Precompilation.Build\">NuGet\u003C/a>.\n\nIf you're looking to do C# projects full-time, check out our \u003Ca href=\"https://stackoverflow.com/jobs/developer-jobs-using-c%23?utm_source=so-owned&amp;utm_medium=blog&amp;utm_campaign=dev-c4al&amp;utm_content=c4al-link\" target=\"_blank\" rel=\"noopener\">C# developer job postings\u003C/a>.","html","2015-07-23T12:00:00.000Z",{"current":259},"announcing-stackexchange-precompilation",[261,269],{"_createdAt":262,"_id":263,"_rev":264,"_type":265,"_updatedAt":262,"slug":266,"title":268},"2023-05-23T16:43:21Z","wp-tagcat-announcements","9HpbCsT2tq0xwozQfkc4ih","blogTag",{"current":267},"announcements","Announcements",{"_createdAt":262,"_id":270,"_rev":264,"_type":265,"_updatedAt":262,"slug":271,"title":273},"wp-tagcat-engineering",{"current":272},"engineering","Engineering","Announcing StackExchange.Precompilation",[276,282,288,294],{"_id":277,"publishedAt":278,"slug":279,"sponsored":12,"title":281},"28e560af-f0aa-4d46-bd90-f435ad604aa7","2026-06-26T14:00:27.102Z",{"_type":10,"current":280},"paging-charity-how-can-engineering-leaders-avoid-becoming-bond-villains","Paging Charity! How can engineering leaders avoid becoming Bond villains?",{"_id":283,"publishedAt":284,"slug":285,"sponsored":12,"title":287},"4b22c2a3-3779-4966-93eb-5230391dbdce","2026-06-23T14:08:58.595Z",{"_type":10,"current":286},"your-ai-shipped-a-backend-that-boots-that-is-the-whole-problem","Your AI shipped a backend that boots. That is the whole problem.",{"_id":289,"publishedAt":290,"slug":291,"sponsored":12,"title":293},"5cf362e1-fe7b-45af-b69c-914731c6a052","2026-06-23T14:00:00.000Z",{"_type":10,"current":292},"the-2026-developer-survey-is-now-open-for-human-developers-only","The 2026 Developer Survey is now open (for human developers only)!",{"_id":295,"publishedAt":296,"slug":297,"sponsored":12,"title":299},"30b995f7-7cb9-4dd8-bf71-d0685940a32b","2026-06-19T14:00:00.000Z",{"_type":10,"current":298},"dispatches-from-o-reilly-from-capabilities-to-responsibilities","Dispatches from O'Reilly: From capabilities to responsibilities",{"data":301,"sourceMap":-1},{"count":302,"lastTimestamp":12},0]