{"id":18486,"date":"2013-10-17T04:03:00","date_gmt":"2013-10-17T04:03:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2013\/10\/17\/net-framework-4-5-1-rtm-start-coding\/"},"modified":"2021-09-30T17:22:59","modified_gmt":"2021-10-01T00:22:59","slug":"net-framework-4-5-1-rtm-start-coding","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/net-framework-4-5-1-rtm-start-coding\/","title":{"rendered":".NET Framework 4.5.1 RTM =&gt; start coding"},"content":{"rendered":"<p><strong>Updated (2017):<\/strong> See <a href=\"https:\/\/github.com\/Microsoft\/dotnet\/blob\/master\/releases\/README.md\"><strong>.NET Framework Releases<\/strong><\/a> to learn about newer releases. This release is unsupported.<\/p>\n<p><strong>Updated (July 2015):<\/strong>\u00a0See\u00a0<a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2015\/07\/20\/announcing-net-framework-4-6.aspx\">Announcing .NET Framework 4.6<\/a>\u00a0to read about the latest version of the NET Framework.<\/p>\n<p>Today, we\u2019re announcing the availability of the <a href=\"http:\/\/blogs.msdn.com\/b\/somasegar\/archive\/2013\/10\/17\/visual-studio-2013-available-for-download.aspx\">.NET Framework 4.5.1 and Visual Studio 2013<\/a> (<a href=\"http:\/\/blogs.msdn.com\/b\/somasegar\/archive\/2013\/10\/17\/visual-studio-2013-available-for-download.aspx\">Soma\u2019s blog<\/a>). You can download these releases, now:<\/p>\n<ul>\n<li><a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkId=321326\">.NET Framework 4.5.1<\/a><\/li>\n<li><a href=\"http:\/\/go.microsoft.com\/fwlink\/p\/?LinkId=306566\">Visual Studio 2013<\/a> (<a href=\"http:\/\/msdn.com\/vstudio\/dn250998.aspx\">SDKs and targeting packs<\/a>)<\/li>\n<\/ul>\n<p>The .NET Framework 4.5.1 is a customer-focused release, based on feedback we\u2019ve collected from <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/category\/31481-net\">UserVoice<\/a> and other sources. In this post, we will highlight the top features that come with the release. If you want even more details, our earlier <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/06\/26\/announcing-the-net-framework-4-5-1-preview.aspx\">.NET Framework 4.5.1 Preview post<\/a> provides an in-depth description of the release.<\/p>\n<p>Check out the <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudio\">Visual Studio Team blog<\/a> for more information on <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudio\/archive\/2013\/10\/17\/visual-studio-2013-released-to-web.aspx\">Visual Studio 2013<\/a>. The <a href=\"http:\/\/blogs.msdn.com\/b\/webdev\">ASP.NET Team blog<\/a> is also a good resource for new <a href=\"http:\/\/blogs.msdn.com\/b\/webdev\/archive\/2013\/10\/17\/announcing-release-of-asp-net-and-web-tools-for-visual-studio-2013.aspx\">ASP.NET features available in Visual Studio 2013<\/a> and in the .NET NuGet feed.<\/p>\n<h2>Developer Productivity<\/h2>\n<p>We heard many requests to make .NET development easier since our last release. We\u2019re happy to report that we delivered a lot of new features to help with that, many of which were built in concert with the <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/tags\/diagnostics\/\">Visual Studio Diagnostics team<\/a>.<\/p>\n<ul>\n<li>Debugger support for <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2013\/06\/26\/debugging-support-for-64-bit-edit-and-continue-in-visual-studio-2013.aspx\">X64 edit and continue (EnC)<\/a><\/li>\n<li>Debugger support for seeing <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2013\/06\/27\/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx\">managed return values<\/a><\/li>\n<li>Async-aware debugging in the <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2013\/07\/01\/debugging-asynchronous-code-in-visual-studio-2013-call-stack-enhancements.aspx\">Call Stack<\/a> and <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2013\/07\/02\/debugging-asynchronous-code-in-visual-studio-2013-tasks-window.aspx\">Tasks<\/a> windows<\/li>\n<li>Debugger support for <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2013\/06\/20\/using-visual-studio-2013-to-diagnose-net-memory-issues-in-production.aspx\">analyzing .NET memory dumps<\/a> (in the Visual Studio Ultimate SKU)<\/li>\n<li>Tools for .NET developers in the <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2013\/07\/12\/performance-and-diagnostics-hub-in-visual-studio-2013.aspx\">Performance and Diagnostics hub<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2013\/07\/03\/what-is-new-in-code-analysis-for-visual-studio-2013.aspx\">Code Analysis UI improvements<\/a><\/li>\n<li>ADO.NET idle connection resiliency<\/li>\n<\/ul>\n<p><strong>X64 edit and continue<\/strong> was our <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2037667-x64-edit-and-continue\">most requested feature<\/a> for this release. In the image below, you see a 64-bit app that is stopped at a breakpoint, with source that has been edited, and is in an invalid state. Once I finish editing the source to a valid state, I can step again (ex: F11) and then continue running my app.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/0676.image_31F334DE.png\" alt=\"image\" width=\"829\" height=\"253\" border=\"0\" \/><\/p>\n<p><strong>Managed return values<\/strong> was another <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2206747-function-return-value-in-debugger\">commonly requested feature<\/a> that we delivered in this release. It allows you to write code the way you want, without having to worry about the difficulty of debugging method invocations that are passed as parameters to other methods.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/6811.image_59D3CB94.png\" alt=\"image\" width=\"546\" height=\"560\" border=\"0\" \/><\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/5153.image_67A6118F.png\" alt=\"image\" width=\"390\" height=\"153\" border=\"0\" \/><\/p>\n<p><strong>Async aware debugging<\/strong> was the next step for us in delivering on the value of our <a href=\"http:\/\/msdn.microsoft.com\/library\/vstudio\/hh873175.aspx\">Task-based Asynchronous Pattern<\/a>. The call-stack Windows in Visual Studio 2013, when run on Windows 8.1 or Windows Server 2012 R2, now delivers the method frames in the order you expect. That\u2019s a big step forward for async development.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"clip_image004\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/5861.clip_image004_6BA4718A.jpg\" alt=\"clip_image004\" width=\"580\" height=\"230\" border=\"0\" \/><\/p>\n<p><strong>ADO.NET connection resiliency<\/strong> is a bit of a magic feature in this release. It doesn\u2019t come with any new APIs to use. Instead, it\u2019s a new capability of .NET that you get \u201cfor free\u201d. <a href=\"http:\/\/msdn.microsoft.com\/library\/dn632678.aspx\">Idle connection resiliency<\/a> re-builds broken idle connections to SQL databases transparently, so that you don\u2019t have to write the code to do that.<\/p>\n<p>Under the covers, this new feature provides a robust connectivity system for recreating broken connections and re-trying transactions. It supports both synchronous and asynchronous operations, so it can be used with a variety of code patterns.<\/p>\n<p>Here\u2019s some simple ADO.NET code that we used to demonstrate this feature:<\/p>\n<pre class=\"code\"><span style=\"background: white; color: #2b91af;\">SqlCommand <\/span><span style=\"background: white; color: black;\">command = <\/span><span style=\"background: white; color: blue;\">new <\/span><span style=\"background: white; color: #2b91af;\">SqlCommand<\/span><span style=\"background: white; color: black;\">(queryString, <\/span><span style=\"background: white; color: #2b91af;\">Program<\/span><span style=\"background: white; color: black;\">.SqlConnection); <\/span><span style=\"background: white; color: #2b91af;\">SqlDataReader <\/span><span style=\"background: white; color: black;\">reader = <\/span><span style=\"background: white; color: blue;\">null<\/span><span style=\"background: white; color: black;\">; <\/span><span style=\"background: white; color: blue;\">try <\/span><span style=\"background: white; color: black;\">{ <\/span><span style=\"background: white; color: green;\">\/\/ Fetch the results <\/span><span style=\"background: white; color: black;\">reader = command.ExecuteReader(); } <\/span><span style=\"background: white; color: blue;\">catch <\/span><span style=\"background: white; color: black;\">(<\/span><span style=\"background: white; color: #2b91af;\">SqlException<\/span><span style=\"background: white; color: black;\">) { <\/span><span style=\"background: white; color: green;\">\/\/ Let the user know something went wrong with the connection <\/span><span style=\"background: white; color: black;\">ReportError(); }<\/span><\/pre>\n<p>It\u2019s part of an app that finds contacts from a SQL Server database. Let\u2019s assume that we\u2019ve started the app, on the .NET Framework 4.5 (not 4.5.1), and that we\u2019ve searched for a few contacts. To mimic the scenario of losing a connection, we intentionally break the connection to the database for the app, with <a href=\"http:\/\/technet.microsoft.com\/en-us\/sysinternals\/bb897437.aspx\">TCPView<\/a>.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"clip_image005\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/7827.clip_image005_127287CB.png\" alt=\"clip_image005\" width=\"594\" height=\"239\" border=\"0\" \/><\/p>\n<p>Here\u2019s what happens when we search for the next contact. Tom, we\u2019re out of luck! The database connection was lost.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"clip_image006\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/5282.clip_image006_39409E0B.png\" alt=\"clip_image006\" width=\"528\" height=\"345\" border=\"0\" \/><\/p>\n<p>When we run the exact same app, with no additional configuration on the .NET Framework 4.5.1, we see a much better experience. We close the connection again, in the same way. However, after that, we\u2019re able to find \u201cTom\u201d in the contacts database! You can see that ADO.NET re-connects to the database automatically. The green highlighted line in TCPView indicates a new connection was created. You can see that the process name is the same. ADO.NET re-created that connection. As you saw in the code above, there\u2019s no logic to cover that case, but only to display an error message.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"clip_image007\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/3618.clip_image007_600EB44B.png\" alt=\"clip_image007\" width=\"592\" height=\"503\" border=\"0\" \/><\/p>\n<h2>Application Performance<\/h2>\n<p>Performance is always an important focus for the .NET team. We added some core features that will help larger scale apps, with a focus on ASP.NET.<\/p>\n<ul>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/10\/09\/asp-net-app-suspend-responsive-shared-net-web-hosting.aspx\">ASP.NET App Suspend<\/a> \u2013 <a href=\"http:\/\/blogs.msdn.com\/b\/webdev\/archive\/2013\/10\/09\/enable-and-monitor-asp-net-app-suspend-on-windows-server-2012-r2.aspx\">responsive shared .NET web hosting<\/a><\/li>\n<li>On-demand large object heap compaction<\/li>\n<li>Multi-core JIT for ASP.NET<\/li>\n<\/ul>\n<p><strong>ASP.NET App Suspend<\/strong> is a bold new approach for shared hosting for .NET apps. It uses the combination of memory (RAM) and storage (HDD or SSD) in a new way that is inspired by the app suspend technologies in Windows Phone and Windows Store. It makes ASP.NET sites much more responsive and enables you to host more sites on a single server. It is very well suited for commercial web hosters, like <a href=\"http:\/\/www.windowsazure.com\/en-us\/pricing\/details\/web-sites\/\">Windows Azure Web Sites<\/a>, and Enterprise IT web hosting.<\/p>\n<p>We conducted a few experiments to run ASP.NET App Suspend through its paces, in our performance lab. I\u2019ve included the results of one of those experiments in the chart below, with DotNetNuke (DNN). Check out our blog post on <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/10\/09\/asp-net-app-suspend-responsive-shared-net-web-hosting.aspx\">ASP.NET App Suspend<\/a> to see the full set of perf numbers,<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"clip_image008\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/3632.clip_image008_0AE7185E.png\" alt=\"clip_image008\" width=\"475\" height=\"276\" border=\"0\" \/><\/p>\n<p>Check out this video to see the experiment that led to the numbers above. Pretty impressive perf improvement. No code changes required!<\/p>\n<p style=\"text-align: center;\"><iframe width=\"319\" height=\"181\" src=\"https:\/\/skydrive.live.com\/embed?cid=61D8464D4D2B3572&amp;resid=61D8464D4D2B3572%21107&amp;authkey=APDE_EVZznwV-4A\" frameborder=\"0\"><\/iframe><\/p>\n<p><strong>Multi-core JIT (MCJ) for ASP.NET<\/strong> is another scenario that we enabled this release, building on our earlier <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2012\/10\/18\/an-easy-solution-for-improving-app-launch-performance.aspx\">client MCJ solution<\/a>. In the .NET Framework 4.5.1 release, we enabled MCJ for scenarios that rely on Assembly.LoadFrom and Appdomain.AssemblyResolve. These APIs are not specific to ASP.NET, but they show up a lot in the ASP.NET apps we tested, so they were necessary to make work with MCJ.<\/p>\n<p>We used DotNetNuke again, to test the benefit of MCJ. You can see the results in the image below. You\u2019ll see that the startup time is similar to what we saw above, with ASP.NET App Suspend. We tested a different page, so the \u201ccold startup\u201d number is a bit different. Here, we see an ~20% startup improvement. In the cold startup case, the app spends 852ms JITing. In the MCJ case, foreground JIT is reduced to 428ms, since 429ms (50%) of JITing can be done concurrently in the background. A 50% cut in JIT time is a good thing!<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"clip_image009\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/2654.clip_image009_46A6B111.png\" alt=\"clip_image009\" width=\"468\" height=\"279\" border=\"0\" \/><\/p>\n<p>You might be wondering why you would use MCJ when you can use ASP.NET App Suspend instead. The App Suspend numbers look <em>way <\/em>better. Well, ASP.NET App Suspend only kicks in after the app has started once, and servers do need to be rebooted sometimes. So, our advice going forward is to use both MCJ and ASP.NET App Suspend, together. MCJ will improve the cold startup case, and then App Suspend will kick in after that, if your site hits the Idle time-out value. The two features work together nicely, as complementary solutions to the same problem.<\/p>\n<p>The great thing about MCJ is that it is enabled by default for ASP.NET in the .NET Framework 4.5.1. You don\u2019t need to do anything to turn it on, other than upgrade your server to use the .NET Framework 4.5.1. It is <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2012\/10\/18\/an-easy-solution-for-improving-app-launch-performance.aspx\">opt-in for client apps<\/a>.<\/p>\n<p><strong> On-demand Large Object Heap (LOH) compaction<\/strong> is another <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2477643-loh-compaction\">requested feature<\/a> that we delivered this release. The LOH is a heap used by the Garbage Collector (GC) for objects that are &gt;= 85,000 bytes. Those objects are often (large) arrays. Until this release, the LOH did not have a compaction mechanism, which <em>could<\/em> lead to fragmentation over time. Fragmentation can occur when apps use large amounts of memory \u2013 at least hundreds of megabytes \u2013 and allocations are both large (objects that are &gt;= 85,000 bytes) and temporary. On 32-bit systems, processes can run out virtual address space due to fragmentation, which results in OutOfMemory (OOM) exceptions. On 64-bit systems, running out of virtual address space is much less likely. Most apps do not run into this problem because they do not make extensive use of the LOH and the small object heaps (SOH) have automatic heap compaction built-in.<\/p>\n<p>In this release, we delivered on-demand compaction for the LOH, which is useful for mitigating LOH fragmentation causing OOM. It is exposed as a <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.runtime.gcsettings.largeobjectheapcompactionmode.aspx\">GC Settings API<\/a>. Since compaction moves large amounts of memory, which is expensive \u2013 GC pause times &gt;1s \u2013 you should only use this unless your app has experienced OOMs due to fragmentation. That\u2019s why we exposed an on-demand mechanism instead of an automatic one. With prudent use, it can be a great tool to reduce fragmentation and avoid running out of virtual address space (OOM). It is also not intended as general feature for reducing memory use.<\/p>\n<p>In the image below, you can see an abstract example of an LOH memory segment that is fragmented. After compaction, you can see that the memory consumed by active objects (in blue) and the free memory (in white) have been separated.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"clip_image010\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/8015.clip_image010_3F877499.png\" alt=\"clip_image010\" width=\"588\" height=\"146\" border=\"0\" \/><\/p>\n<p>The win is that the free memory is now in one contiguous range and is able to satisfy much larger allocation requests than it could before. That means that an app will use less virtual address space, since fragmentation can be kept to a more manageable level, and memory is generally used more efficiently.<\/p>\n<h2>Continuous Innovation<\/h2>\n<p>We\u2019re now delivering software faster. The .NET Framework 4.5.1 was delivered about a year after the <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2012\/08\/15\/announcing-the-release-of-net-framework-4-5-rtm-product-and-source-code.aspx\">.NET Framework 4.5<\/a>. That\u2019s pretty fast for a mature framework. For even faster releases, we use <a href=\"http:\/\/nuget.org\/\">NuGet.org<\/a>. You can see that we have released quite a few <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/p\/nugetpackages.aspx\">.NET NuGet Packages<\/a> available already. It\u2019s not just something that we started recently.<\/p>\n<ul>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/p\/nugetpackages.aspx\">.NET NuGet releases<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/09\/03\/updated-nuget-support-in-visual-studio-2012-4.aspx\">Better discoverability<\/a> of Microsoft <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/p\/nugetpackages.aspx\">.NET NuGet packages<\/a><\/li>\n<li>Supporting <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/10\/16\/nuget-is-a-net-framework-release-vehicle.aspx\">enterprise use of .NET NuGet packages<\/a><\/li>\n<\/ul>\n<p><strong>.NET NuGet releases<\/strong> have been <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/tags\/nuget\/\">plentiful over the past year<\/a>, since we released the .NET Framework 4.5. If we look a traffic to this blog and also to our <a href=\"https:\/\/twitter.com\/dotnet\">@dotnet<\/a> twitter account, we can see that there is a lot of interest in ta<a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/6862.clip_image011_66558AD9.png\"><img decoding=\"async\" style=\"margin: 0px 12px; float: right;\" title=\"clip_image011\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/6862.clip_image011_66558AD9.png\" alt=\"clip_image011\" width=\"275\" height=\"237\" align=\"right\" border=\"0\" hspace=\"12\" \/><\/a>rgeted releases that fill key gaps. Thanks for the support on this new approach. The following are the NuGet releases that have gone out since 4.5 RTM.<\/p>\n<ul>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/07\/17\/httpclient-2-2-is-now-stable.aspx\">HttpClient<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/09\/25\/immutable-collections-ready-for-prime-time.aspx\">ImmutableCollections<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/adonet\/archive\/2013\/10\/17\/ef6-rtm-available.aspx\">EntityFramework 6<\/a><\/li>\n<li><a href=\"http:\/\/www.asp.net\/web-api\/overview\/testing-and-debugging\/tracing-in-aspnet-web-api\">Web API Tracing<\/a><\/li>\n<li><a href=\"http:\/\/www.asp.net\/web-api\/overview\/creating-web-apis\/creating-api-help-pages\">Web API Help Page<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/webdev\/archive\/2013\/01\/29\/getting-started-with-asp-net-webapi-odata-in-3-simple-steps.aspx\">Web API OData<\/a><\/li>\n<li><a href=\"http:\/\/www.hanselman.com\/blog\/IntroducingASPNETFriendlyUrlsCleanerURLsEasierRoutingAndMobileViewsForASPNETWebForms.aspx\">Friendly URL\u2019s for Web Forms<\/a><\/li>\n<li><a href=\"http:\/\/www.asp.net\/signalr\">SignalR<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/08\/22\/portable-compression-is-now-stable.aspx\">Compression<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/08\/15\/announcing-traceevent-monitoring-and-diagnostics-for-the-cloud.aspx\">TraceEvent<\/a><\/li>\n<li><a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/08\/09\/announcing-the-eventsource-nuget-package-write-to-the-windows-event-log.aspx\">EventSource<\/a><\/li>\n<\/ul>\n<p>We\u2019re happy to see high traffic numbers to our release announcements and to our download pages. Even more important is that NuGet releases enable us to have a higher-level of engagement with you, our developer customers. It\u2019s somehow unintuitive that shorter releases would allow more feedback to get into the product, but it\u2019s true. If you look at our <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/tags\/nuget\/\">blog posts for our NuGet releases<\/a>, you\u2019ll see multiple cases where we publically made product changes based on direct customer feedback. Here\u2019s a favorite example, where we (temporarily) pulled ImmutableArray&lt;T&gt; from our <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/09\/12\/immutable-collections-are-now-rc.aspx\">ImmutableCollection package<\/a>. This was based on your feedback and results in very high quality releases. We cannot wait to see where we are one year from now.<\/p>\n<p><strong>Better discoverability of Microsoft .NET NuGet packages<\/strong> was a key goal for us. Half a year ago, the NuGet client, which comes with Visual Studio, had a single view onto the entire NuGet catalog. That didn\u2019t make much sense to us. We would talk to customers about the NuGet packages that we had released. They\u2019d be interested to try out those releases, but that would be the first time they\u2019d heard about them. We knew that we had a discoverability problem.<\/p>\n<p>The NuGet team came to the rescue. We now have a \u201cMicrosoft and .NET\u201d feed within the NuGet client. It\u2019s the same feed that you can see on our <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/p\/nugetpackages.aspx\">.NET NuGet Packages page<\/a>. You can use that feed, in either location, to find all of the libraries that the .NET team has released. Please try them out and give us feedback.<\/p>\n<p>The screenshot below is the NuGet client in Visual Studio 2013.<\/p>\n<p><img decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none;\" title=\"image\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2013\/10\/0131.image_26CAA1DE.png\" alt=\"image\" width=\"621\" height=\"416\" border=\"0\" \/><\/p>\n<p><strong>Supporting enterprise use of .NET NuGet packages<\/strong> was an important goal of this release.\u00a0 We wanted to extend the expectation of a high quality level and the support and servicing model that we already have with the .NET Framework to our .NET NuGet packages. To achieve that, we used the <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/p\/nugetpackages.aspx\">.NET NuGet feed<\/a> described above as the focus for this effort. We\u2019ve been adding our packages to the feed, and have ensured that each one of them meet the same quality bar as the .NET Framework. If you stick to stable releases in our feed, then are using <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/10\/16\/nuget-is-a-net-framework-release-vehicle.aspx\">NuGet as a supported .NET Framework release vehicle<\/a>.<\/p>\n<p>We also had major feature ask from some of our larger corporate customers, to enable Microsoft Update servicing of our .NET NuGet packages. In corporate\/enterprise environments, we see .NET apps being installed thousands of times, on client machines and web farms. Those customers are happy depending on the .NET Framework, since they know it has a strong servicing mechanism, via MU. That\u2019s one of the reasons they choose .NET, actually. Up until now, we had not extended that servicing model to our NuGet packages, which presented a blocker to those customers, and that\u2019s exactly what they told us.<\/p>\n<p>Starting with the .NET Framework 4.5.1, we have extended our MU servicing model to our <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/p\/nugetpackages.aspx\">.NET NuGet Packages<\/a>. Going forward, you can deploy apps on desktops and servers that use our NuGet packages and feel confident that we\u2019ll service them via MU. The only likely time we\u2019ll service NuGet files via MU is to patch a critical security vulnerability. We\u2019ve never found the need to do that, however, we do think it is a good idea to have this extra measure available to use. NuGet.org remains our primary vehicle for NuGet package updates, even in the case of critical security updates.<\/p>\n<h2>Summary<\/h2>\n<p>The .NET Framework 4.5.1 is a big release with many new great features to try out. We covered several areas of the product, such as developer productivity, app performance and shipping releases faster. We\u2019ve had great feedback since our <a href=\"http:\/\/blogs.msdn.com\/b\/dotnet\/archive\/2013\/06\/26\/announcing-the-net-framework-4-5-1-preview.aspx\">Preview release<\/a>. Now that the final release of the .NET Framework 4.5.1 is available, please do install it and Visual Studio 2013 and try out the new features.<\/p>\n<ul>\n<li><a href=\"http:\/\/go.microsoft.com\/fwlink\/?LinkId=321326\">.NET Framework 4.5.1<\/a><\/li>\n<li><a href=\"http:\/\/go.microsoft.com\/fwlink\/p\/?LinkId=306566\">Visual Studio 2013<\/a> (<a href=\"http:\/\/msdn.com\/vstudio\/dn250998.aspx\">SDKs and targeting packs<\/a>)<\/li>\n<\/ul>\n<p>The following are the <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/category\/31481-net\">UserVoice requests<\/a> that have been closed as completed this release:<\/p>\n<ul>\n<li><a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2037667-x64-edit-and-continue\">x64 edit and continue<\/a><\/li>\n<li><a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2206747-function-return-value-in-debugger\">Function return value in debugger<\/a><\/li>\n<li><a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2967457-please-provide-sorting-in-the-code-analysis-window\">Sorting and filtering in the Code analysis window<\/a><\/li>\n<li><a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2477643-loh-compaction\">LOH compaction<\/a><\/li>\n<\/ul>\n<p>While the latest releases are out, please don\u2019t hesitate to give us feedback. We\u2019re on a faster release cadence now, and would appreciate your feedback as we consider what to do next. The best places are <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/category\/31481-net\">UserVoice<\/a>, <a href=\"http:\/\/connect.microsoft.com\/VisualStudio\">Visual Studio Connect<\/a> and the comment to this post. We\u2019re also listening on <a href=\"https:\/\/twitter.com\/dotnet\">Twitter<\/a> and <a href=\"http:\/\/facebook.com\/dotnet\">Facebook<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Updated (2017): See .NET Framework Releases to learn about newer releases. This release is unsupported. Updated (July 2015):\u00a0See\u00a0Announcing .NET Framework 4.6\u00a0to read about the latest version of the NET Framework. Today, we\u2019re announcing the availability of the .NET Framework 4.5.1 and Visual Studio 2013 (Soma\u2019s blog). You can download these releases, now: .NET Framework 4.5.1 [&hellip;]<\/p>\n","protected":false},"author":11288,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685],"tags":[11,30,31,36,43,47,52,104,108,147],"class_list":["post-18486","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-net-framework","tag-announcement","tag-asp-net","tag-async","tag-bcl","tag-clr","tag-compatibility","tag-nuget","tag-performance","tag-visual-studio"],"acf":[],"blog_post_summary":"<p>Updated (2017): See .NET Framework Releases to learn about newer releases. This release is unsupported. Updated (July 2015):\u00a0See\u00a0Announcing .NET Framework 4.6\u00a0to read about the latest version of the NET Framework. Today, we\u2019re announcing the availability of the .NET Framework 4.5.1 and Visual Studio 2013 (Soma\u2019s blog). You can download these releases, now: .NET Framework 4.5.1 [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/18486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/11288"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=18486"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/18486\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=18486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=18486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=18486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}