{"id":14265,"date":"2017-08-14T09:12:33","date_gmt":"2017-08-14T16:12:33","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/dotnet\/?p=14265"},"modified":"2022-08-04T21:57:11","modified_gmt":"2022-08-05T04:57:11","slug":"announcing-net-core-2-0","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-net-core-2-0\/","title":{"rendered":"Announcing .NET Core 2.0"},"content":{"rendered":"<p><a href=\"https:\/\/www.microsoft.com\/net\/download\/core\">.NET Core 2.0<\/a> is available today as a final release. You can start developing with it at the command line, in your favorite text editor, in <a href=\"https:\/\/blogs.msdn.microsoft.com\/visualstudio\/2017\/08\/14\/visual-studio-2017-version-15-3-released\/\">Visual Studio 2017 15.3<\/a>, Visual Studio Code or Visual Studio for Mac. It is ready for production workloads, on your own hardware or your favorite cloud, like <a href=\"https:\/\/docs.microsoft.com\/dotnet\/azure\/\">Microsoft Azure<\/a>.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/download-archives\/2.0.0-download.md\">Downloads<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0-supported-os.md\">Supported OSes<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0.0.md\">Release Notes<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0.0-known-issues.md\">Known Issues<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/dotnet\/core\/\">Documentation<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/dotnet\/core\/tutorials\/\">Tutorials<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/dotnet-docker-samples\/blob\/master\/README.md\">Samples<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0.0-contributor.md\">Contributors<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0.0-commit.md\">Commits<\/a><\/li>\n<\/ul>\n<p>We are also releasing ASP.NET Core 2.0 and Entity Framework Core 2.0. Read the <a href=\"https:\/\/devblogs.microsoft.com\/aspnet\/announcing-asp-net-core-2-0\/\">ASP.NET Core 2.0<\/a> and the <a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2017\/08\/14\/announcing-entity-framework-core-2-0\/\">Entity Framework Core 2.0<\/a> announcements for details. You can also watch the <a href=\"https:\/\/aka.ms\/dotnetcore2launchvideo\">launch video on Channel 9<\/a> to see many of the new features in action.<\/p>\n<p>The <a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2017\/08\/14\/announcing-net-standard-2-0\/\">.NET Standard 2.0 spec is complete<\/a>, finalized at the same time as <a href=\"https:\/\/docs.microsoft.com\/dotnet\/api\/?view=netcore-2.0\">.NET Core 2.0<\/a>. .NET Standard is a key effort to improve code sharing and to make the APIs available in each .NET implementation more consistent. <a href=\"https:\/\/docs.microsoft.com\/dotnet\/api\/?view=netstandard-2.0\">.NET Standard 2.0<\/a> more than doubles that set of APIs that you have available for your projects.<\/p>\n<p>.NET Core 2.0 has been deployed to <a href=\"https:\/\/azure.microsoft.com\/services\/app-service\/web\/\">Azure Web Apps<\/a>. It is now available in all Azure regions.<\/p>\n<p>.NET Core 2.0 includes major <a href=\"https:\/\/github.com\/dotnet\/announcements\/issues?q=is%3Aissue+is%3Aopen+label%3A%22.NET+Core+2.0%22\">improvements<\/a> that make .NET Core easier to use and much more capable as a platform. The following improvements are the biggest ones and others are described in the body of this post. Please share feedback and any issues you encounter at <a href=\"https:\/\/github.com\/dotnet\/core\/issues\/812\">dotnet\/core #812<\/a>.<\/p>\n<h3><a id=\"user-content-runtime\" class=\"anchor\" href=\"#runtime\"><\/a>Runtime<\/h3>\n<ul>\n<li>Major performance improvements in the runtime and framework<\/li>\n<li>Implements <a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/24\">.NET Standard 2.0<\/a><\/li>\n<li>6 new <a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0-supported-os.md\">platforms supported<\/a>, including Debian Stretch, SUSE Linux Enterprise Server 12 SP2, and macOS High Sierra.<\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/10\">RyuJIT is the x86 JIT in .NET Core 2.0<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/29\">Linux and Windows ARM32 builds now available<\/a>, in preview.<\/li>\n<\/ul>\n<h3><a id=\"user-content-sdk\" class=\"anchor\" href=\"#sdk\"><\/a>SDK<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/23\"><code>dotnet restore<\/code> is now an implicit command<\/a>.<\/li>\n<li>.NET Core and .NET Standard projects can reference .NET Framework NuGet packages and projects.<\/li>\n<li>The .NET Core SDK can be built from source with the <a href=\"https:\/\/github.com\/dotnet\/source-build\">source-build repo<\/a>.<\/li>\n<\/ul>\n<h3><a id=\"user-content-visual-studio\" class=\"anchor\" href=\"#visual-studio\"><\/a>Visual Studio<\/h3>\n<ul>\n<li>Live Unit Testing supports .NET Core<\/li>\n<li>Code navigation improvements<\/li>\n<li>C# Azure Functions support in the box<\/li>\n<li>CI\/CD support for containers<\/li>\n<\/ul>\n<p>For Visual Studio users: You need to update to the latest versions of Visual Studio to use .NET Core 2.0. You will need to install the <a href=\"https:\/\/dot.net\/core\">.NET Core 2.0 SDK<\/a> separately for this update.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.visualstudio.com\/vs\/\">Visual Studio 2017 15.3+<\/a><\/li>\n<li><a href=\"https:\/\/www.visualstudio.com\/vs\/visual-studio-mac\">Visual Studio for Mac<\/a><\/li>\n<li><a href=\"https:\/\/code.visualstudio.com\/docs\/other\/dotnet\">Visual Studio Code &#8212; C# Extension<\/a><\/li>\n<\/ul>\n<h3><a id=\"user-content-thanks\" class=\"anchor\" href=\"#thanks\"><\/a>Thanks!<\/h3>\n<p>On behalf of the entire team, I want to express our gratitude for <a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0.0-contributor.md\">all the direct contributions that we received for .NET Core 2.0<\/a>. Thanks! Some of the most prolific contributors for .NET Core 2.0 are from companies investing in .NET Core, other than Microsoft. Thanks to <a href=\"https:\/\/developer.tizen.org\/development\/tizen-.net-preview\/introduction\">Samsung<\/a> and Qualcomm for your <a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/2.0\/2.0.0-commit.md\">contributions<\/a> to .NET Core.<\/p>\n<p>The .NET Core team shipped two .NET Core 2.0 previews (<a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-net-core-2-0-preview-1\/\">preview 1<\/a> and <a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2017\/06\/28\/announcing-net-core-2-0-preview-2\/\">preview 2<\/a>) leading up to today&#8217;s release. Thanks to everyone who tried out those releases and gave us feedback.<\/p>\n<h2><a id=\"user-content-using-net-core-20\" class=\"anchor\" href=\"#using-net-core-20\"><\/a>Using .NET Core 2.0<\/h2>\n<p>You can get started with .NET Core 2.0 in just a few minutes, on Windows macOS or Linux.<\/p>\n<p>You first need to install the <a href=\"https:\/\/www.microsoft.com\/net\/download\/core\">.NET Core SDK 2.0<\/a>.<\/p>\n<p>You can create .NET Core 2.0 apps on the command line or in <a href=\"https:\/\/www.visualstudio.com\/\">Visual Studio<\/a>.<\/p>\n<p>Creating new projects is easy. There are templates you can use in Visual Studio 2017. You can also create new application at the command line with <code>dotnet new<\/code>, as you can see in the following example.<\/p>\n<div class=\"highlight highlight-text-shell-session\">\n<pre><span class=\"pl-c1\">C:samples&gt;dotnet new console -o console-app<\/span>\r\n<span class=\"pl-c1\">C:samples&gt;cd console-app<\/span>\r\n<span class=\"pl-c1\">C:samplesconsole-app&gt;dotnet run<\/span>\r\n<span class=\"pl-c1\">Hello World!<\/span><\/pre>\n<\/div>\n<h3>Upgrading Existing\u00a0Applications<\/h3>\n<p>You can also upgrade an existing application to .NET Core 2.0. In Visual Studio, you can change the target framework of an application to .NET Core 2.0.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-14305\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/core2-targeting.1.png\" alt=\"\" width=\"1896\" height=\"497\" \/><\/p>\n<p>If you are working with <a href=\"https:\/\/code.visualstudio.com\/\">Visual Studio Code<\/a> or another text editor, you will need to update the target framework to <code>netcoreapp2.0<\/code>.<\/p>\n<div class=\"highlight highlight-text-xml\">\n<pre> &lt;<span class=\"pl-ent\">PropertyGroup<\/span>&gt;\r\n      &lt;<span class=\"pl-ent\">TargetFramework<\/span>&gt;netcoreapp2.0&lt;\/<span class=\"pl-ent\">TargetFramework<\/span>&gt;\r\n &lt;\/<span class=\"pl-ent\">PropertyGroup<\/span>&gt;<\/pre>\n<\/div>\n<p>You can read more in-depth instructions in the <a href=\"https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/migration\/1x-to-2x\/\">Migrating from ASP.NET Core 1.x to ASP.NET Core 2.0<\/a> document.<\/p>\n<h3>Upgrading Libraries<\/h3>\n<p>You do not need to update libraries to .NET Standard 2.0. .NET Standard 1.x versions will be supported forever and are not considered &#8220;old&#8221; or &#8220;stale&#8221;. .NET Standard is just a spec, so it doesn&#8217;t age in the way that platforms do. In general, libraries should target the lowest version of .NET Standard they can tolerate (for <a href=\"https:\/\/github.com\/dotnet\/standard\/blob\/master\/docs\/versions.md\">maximum .NET implementation applicability<\/a>) unless they require APIs in higher versions.\u00a0If you do want to update libraries, you can do it the same way, either in Visual Studio or directly in the project file, as you can see with the following project file segment that target .NET Standard 2.0.<\/p>\n<div class=\"highlight highlight-text-xml\">\n<pre> &lt;<span class=\"pl-ent\">PropertyGroup<\/span>&gt;\r\n      &lt;<span class=\"pl-ent\">TargetFramework<\/span>&gt;netstandard2.0&lt;\/<span class=\"pl-ent\">TargetFramework<\/span>&gt;\r\n &lt;\/<span class=\"pl-ent\">PropertyGroup<\/span>&gt;<\/pre>\n<\/div>\n<p>You can also create libraries that target .NET Core. This is not recommended as a general scenario because .NET Core libraries can only be used by .NET Core applications. They cannot be used by .NET Framework of Xamarin applications, as .NET Standard libraries can (this is why .NET Standard is the recommended target framework for libraries). You should only build .NET Core libraries if you require <a href=\"https:\/\/github.com\/dotnet\/standard\/blob\/master\/docs\/comparisons\/netstandard2.0_vs_netcoreapp2.0\/README.md\">APIs that are only in .NET Core<\/a>.<\/p>\n<h3><a id=\"user-content-relationship-to-net-core-10-and-11-apps\" class=\"anchor\" href=\"#relationship-to-net-core-10-and-11-apps\"><\/a>Relationship to .NET Core 1.0 and 1.1 Apps<\/h3>\n<p>You can install .NET Core 2.0 on machines with .NET Core 1.0 and 1.1. Your 1.0 and 1.1 applications will continue to use the 1.0 and 1.1 runtimes, respectively. They will not roll forward to the 2.0 runtime unless you explicitly update your apps to do so.<\/p>\n<p>By default, the latest SDK is always used. After installing the .NET Core 2.0 SDK, you will use it for all projects, including 1.0 and 1.1 projects. As stated above, 1.0 and 1.1 projects will still use the 1.0 and 1.1 runtimes, respectively.<\/p>\n<p>You can configure a directory (all the way up to a whole drive) to use a specific SDK by creating a <a href=\"https:\/\/docs.microsoft.com\/dotnet\/core\/tools\/global-json\">global.json file<\/a> that specifies a specific .NET Core SDK version. All <code>dotnet<\/code> uses &#8220;under&#8221; that file will use that version of the SDK. If you do that, make sure you have that version installed.<\/p>\n<h2><a id=\"user-content-net-core-runtime-improvements\" class=\"anchor\" href=\"#net-core-runtime-improvements\"><\/a>.NET Core Runtime Improvements<\/h2>\n<p>The .NET Core 2.0 Runtime has the following improvements.<\/p>\n<h3><a id=\"user-content-performance-improvements\" class=\"anchor\" href=\"#performance-improvements\"><\/a>Performance Improvements<\/h3>\n<p>There are many performance improvements in .NET Core 2.0. The team published a few posts describing the improvements to the .NET Core Runtime in detail.<\/p>\n<ul>\n<li><a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2017\/06\/07\/performance-improvements-in-net-core\/\">Performance Improvements in .NET Core<\/a><\/li>\n<li><a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2017\/06\/29\/performance-improvements-in-ryujit-in-net-core-and-net-framework\/\">Performance Improvements in RyuJIT in .NET Core and .NET Framework<\/a><\/li>\n<li><a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2017\/07\/20\/profile-guided-optimization-in-net-core-2-0\/\">Profile-guided optimization in .NET Core 2.0<\/a><\/li>\n<\/ul>\n<h3><a id=\"user-content-net-core-20-implements-net-standard-20\" class=\"anchor\" href=\"#net-core-20-implements-net-standard-20\"><\/a>.NET Core 2.0 Implements .NET Standard 2.0<\/h3>\n<p>The <a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/24\">.NET Standard 2.0<\/a> spec has been finalized at the same time as .NET Core 2.0.<\/p>\n<p>We have more than doubled the set of available APIs in .NET Standard from <strong>13k<\/strong> in .NET Standard 1.6 to <strong>32k<\/strong> in .NET Standard 2.0. Most of the added APIs are .NET Framework APIs. These additions make it much easier to port existing code to .NET Standard, and, by extension, to any .NET implementation of .NET Standard, such as .NET Core 2.0 and the upcoming version of Universal Windows Platform (UWP).<\/p>\n<p>.NET Core 2.0 implements the .NET Standard 2.0 spec: all <strong>32k<\/strong> APIs that the spec defines.<\/p>\n<p>You can see a <a href=\"https:\/\/github.com\/dotnet\/standard\/blob\/master\/docs\/comparisons\/netstandard2.0_vs_netcoreapp2.0\/README.md\">diff between .NET Core 2.0 and .NET Standard 2.0<\/a> to understand the set of APIs that .NET Core 2.0 provides beyond the set required by the .NET Standard 2.0 spec.<\/p>\n<h3><a id=\"user-content-much-easier-to-target-linux-as-a-single-operating-system\" class=\"anchor\" href=\"#much-easier-to-target-linux-as-a-single-operating-system\"><\/a>Much easier to target Linux as a single operating system<\/h3>\n<p>.NET Core 2.0 treats Linux as a single operating system. There is now a single Linux build (per chip architecture) that works on all Linux distros that we&#8217;ve tested. Our support so far is specific to <a href=\"https:\/\/www.gnu.org\/software\/libc\/\">glibc<\/a>-based distros and more specifically Debian- and Red Hat-based Linux distros.<\/p>\n<p>There are other Linux distros that we would like to support, like those that use <a href=\"https:\/\/www.musl-libc.org\/\">musl<\/a> C Standard library, such as <a href=\"https:\/\/www.alpinelinux.org\/\">Alpine<\/a>. Alpine will be supported in a later release.<\/p>\n<p>Please tell us if the .NET Core 2.0 Linux build doesn\u2019t work well on your favorite Linux distro.<\/p>\n<p>Similar improvements have been made for Windows and macOS. You can now publish for the following &#8220;runtimes&#8221;.<\/p>\n<ul>\n<li><code>linux-x64<\/code>, <code>linux-arm<\/code><\/li>\n<li><code>win-x64<\/code>, <code>win-x86<\/code><\/li>\n<li><code>osx-x64<\/code><\/li>\n<\/ul>\n<h3>Linux and Windows ARM32 builds now available, in Preview<\/h3>\n<p><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/29\">The .NET Core team is now producing ARM32 builds<\/a> for .NET Core 2.0+. These builds are great for using on Raspberry Pi. These builds are not yet supported by Microsoft and have preview status.<\/p>\n<p>The team is producing Runtime and not SDK builds for .NET Core. As a result, you need to build your applications on another operating system and then copy to a Raspberry Pi (or similar device) to run.<\/p>\n<p>There are two good sources of .NET Core ARM32 samples that you can use to get started:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/samples\/RaspberryPiInstructions.md\">.NET Core on Raspberry Pi<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/dotnet-docker-samples#arm32--raspberry-pi\">.NET Core Docker Samples<\/a><\/li>\n<\/ul>\n<h3><a id=\"user-content-globalization-invariant-mode\" class=\"anchor\" href=\"#globalization-invariant-mode\"><\/a>Globalization Invariant Mode<\/h3>\n<p>.NET Core 2.0 includes a new <a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/20\">opt-in globalization mode<\/a> that provides basic globalization-related functionality that is uniform across operating systems and languages. The benefit of this new mode is its uniformity, distribution size, and the absence of any globalization dependencies.<\/p>\n<p>See <a href=\"https:\/\/github.com\/dotnet\/corefx\/blob\/master\/Documentation\/architecture\/globalization-invariant-mode.md\">.NET Core Globalization Invariant Mode<\/a> to learn more about this feature, and decide whether the new mode is a good choice for your app or if it breaks its functionality.<\/p>\n<h2><a id=\"user-content-net-core-sdk-improvements\" class=\"anchor\" href=\"#net-core-sdk-improvements\"><\/a>.NET Core SDK Improvements<\/h2>\n<p>The .NET Core SDK 2.0 has the following improvements.<\/p>\n<h3><a id=\"user-content-dotnet-restore-is-implicit-for-commands-that-require-it\" class=\"anchor\" href=\"#dotnet-restore-is-implicit-for-commands-that-require-it\"><\/a>dotnet restore is implicit for commands that require it<\/h3>\n<p>The <code>dotnet restore<\/code> command has been a required set of keystrokes with .NET Core to date. The command installs required project dependencies and some other tasks. It&#8217;s easy to forget to type it and the error messages that tell you that you need to type it are not always helpful. It is now implicitly called on your behalf for commands like <code>run<\/code>, <code>build<\/code> and <code>publish<\/code>.<\/p>\n<p>The following example workflow demonstates the absense of a required <code>dotnet restore<\/code> command:<\/p>\n<div class=\"highlight highlight-text-shell-session\">\n<pre><span class=\"pl-c1\">C:Usersrich&gt;dotnet new mvc -o mvcapp<\/span>\r\n<span class=\"pl-c1\">The template \"ASP.NET Core Web App (Model-View-Controller)\" was created successfully.<\/span>\r\n<span class=\"pl-c1\">This template contains technologies from parties other than Microsoft, see https:\/\/aka.ms\/template-3pn for details.<\/span>\r\n\r\n<span class=\"pl-c1\">Processing post-creation actions...<\/span>\r\n<span class=\"pl-c1\">Running 'dotnet restore' on mvcappmvcapp.csproj...<\/span>\r\n<span class=\"pl-c1\">  Restoring packages for C:Usersrichmvcappmvcapp.csproj...<\/span>\r\n<span class=\"pl-c1\">  Restore completed in 32.3 ms for C:Usersrichmvcappmvcapp.csproj.<\/span>\r\n<span class=\"pl-c1\">  Generating MSBuild file C:Usersrichmvcappobjmvcapp.csproj.nuget.g.props.<\/span>\r\n<span class=\"pl-c1\">  Generating MSBuild file C:Usersrichmvcappobjmvcapp.csproj.nuget.g.targets.<\/span>\r\n<span class=\"pl-c1\">  Restore completed in 2.26 sec for C:Usersrichmvcappmvcapp.csproj.<\/span>\r\n<span class=\"pl-c1\">Restore succeeded.<\/span>\r\n\r\n<span class=\"pl-c1\">C:Usersrich&gt;cd mvcapp<\/span>\r\n\r\n<span class=\"pl-c1\">C:Usersrichmvcapp&gt;dotnet run<\/span>\r\n<span class=\"pl-c1\">Hosting environment: Production<\/span>\r\n<span class=\"pl-c1\">Content root path: C:Usersrichmvcapp<\/span>\r\n<span class=\"pl-c1\">Now listening on: http:\/\/localhost:5000<\/span>\r\n<span class=\"pl-c1\">Application started. Press Ctrl+C to shut down.<\/span>\r\n<span class=\"pl-c1\">Application is shutting down...<\/span><\/pre>\n<\/div>\n<h3><a id=\"user-content-reference-net-framework-libraries-from-net-standard\" class=\"anchor\" href=\"#reference-net-framework-libraries-from-net-standard\"><\/a>Reference .NET Framework libraries from .NET Standard<\/h3>\n<p>You can now reference .NET Framework libraries from .NET Standard libraries using Visual Studio 2017 15.3. This feature helps you migrate .NET Framework code to .NET Standard or .NET Core over time (start with binaries and then move to source). It is also useful in the case that the source code is no longer accessible or is lost for a .NET Framework library, enabling it to be still be used in new scenarios.<\/p>\n<p>We expect that this feature will be used most commonly from .NET Standard libraries. It also works for .NET Core apps and libraries. They can depend on .NET Framework libraries, too.<\/p>\n<p>The supported scenario is referencing a .NET Framework library that happens to only use types within the .NET Standard API set. Also, it is only supported for libraries that target .NET Framework 4.6.1 or earlier (even .NET Framework 1.0 is fine). If the .NET Framework library you reference relies on WPF, the library will not work (or at least not in all cases). You can use libraries that depend on additional APIs,but not for the codepaths you use. In that case, you will need to invest singificantly in testing.<\/p>\n<p>You can see this feature in use in the following images.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-14325\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/dotnet-standard-interop-with-framework-461-running-app.png\" alt=\"\" width=\"1188\" height=\"514\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/dotnet-standard-interop-with-framework-461-running-app.png 1188w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/dotnet-standard-interop-with-framework-461-running-app-300x130.png 300w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/dotnet-standard-interop-with-framework-461-running-app-768x332.png 768w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/dotnet-standard-interop-with-framework-461-running-app-1024x443.png 1024w\" sizes=\"(max-width: 1188px) 100vw, 1188px\" \/><\/p>\n<p>The call stack for this app makes the dependency from .NET Core to .NET Standard to .NET Framework more obvious.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-14335\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/dotnet-standard-interop-with-framework-461-call-stack-1.png\" alt=\"\" width=\"717\" height=\"102\" \/><\/p>\n<h3><a id=\"user-content-net-standard-nuget-packages-no-longer-have-required-dependencies\" class=\"anchor\" href=\"#net-standard-nuget-packages-no-longer-have-required-dependencies\"><\/a>.NET Standard NuGet Packages no longer have required dependencies<\/h3>\n<p>.NET Standard NuGet packages no longer have any required dependencies if they target .NET Standard 2.0 or later. The .NET Standard dependency is now provided by the .NET Core SDK. It isn&#8217;t necessary as a NuGet artifact.<\/p>\n<p>The following is an example nuspec (recipe for a NuGet package) targeting .NET Standard 2.0.<\/p>\n<div class=\"highlight highlight-text-xml\">\n<pre>&lt;?<span class=\"pl-ent\">xml<\/span><span class=\"pl-e\"> version<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>1.0<span class=\"pl-pds\">\"<\/span><\/span><span class=\"pl-e\"> encoding<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>utf-8<span class=\"pl-pds\">\"<\/span><\/span>?&gt;\r\n&lt;<span class=\"pl-ent\">package<\/span> <span class=\"pl-e\">xmlns<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>http:\/\/schemas.microsoft.com\/packaging\/2012\/06\/nuspec.xsd<span class=\"pl-pds\">\"<\/span><\/span>&gt;\r\n    &lt;<span class=\"pl-ent\">metadata<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">id<\/span>&gt;ClassLibrary1&lt;\/<span class=\"pl-ent\">id<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">version<\/span>&gt;1.0.0&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">authors<\/span>&gt;ClassLibrary1&lt;\/<span class=\"pl-ent\">authors<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">owners<\/span>&gt;ClassLibrary1&lt;\/<span class=\"pl-ent\">owners<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">requireLicenseAcceptance<\/span>&gt;false&lt;\/<span class=\"pl-ent\">requireLicenseAcceptance<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">description<\/span>&gt;Package Description&lt;\/<span class=\"pl-ent\">description<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">dependencies<\/span>&gt;\r\n            &lt;<span class=\"pl-ent\">group<\/span> <span class=\"pl-e\">targetFramework<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>.NETStandard2.0<span class=\"pl-pds\">\"<\/span><\/span> \/&gt;\r\n        &lt;\/<span class=\"pl-ent\">dependencies<\/span>&gt;\r\n    &lt;\/<span class=\"pl-ent\">metadata<\/span>&gt;\r\n&lt;\/<span class=\"pl-ent\">package<\/span>&gt;<\/pre>\n<\/div>\n<p>The following is an example nuspec (recipe for a NuGet package) targeting .NET Standard 1.4.<\/p>\n<div class=\"highlight highlight-text-xml\">\n<pre>&lt;?<span class=\"pl-ent\">xml<\/span><span class=\"pl-e\"> version<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>1.0<span class=\"pl-pds\">\"<\/span><\/span><span class=\"pl-e\"> encoding<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>utf-8<span class=\"pl-pds\">\"<\/span><\/span>?&gt;\r\n&lt;<span class=\"pl-ent\">package<\/span> <span class=\"pl-e\">xmlns<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>http:\/\/schemas.microsoft.com\/packaging\/2012\/06\/nuspec.xsd<span class=\"pl-pds\">\"<\/span><\/span>&gt;\r\n    &lt;<span class=\"pl-ent\">metadata<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">id<\/span>&gt;ClassLibrary1&lt;\/<span class=\"pl-ent\">id<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">version<\/span>&gt;1.0.0&lt;\/<span class=\"pl-ent\">version<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">authors<\/span>&gt;ClassLibrary1&lt;\/<span class=\"pl-ent\">authors<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">owners<\/span>&gt;ClassLibrary1&lt;\/<span class=\"pl-ent\">owners<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">requireLicenseAcceptance<\/span>&gt;false&lt;\/<span class=\"pl-ent\">requireLicenseAcceptance<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">description<\/span>&gt;Package Description&lt;\/<span class=\"pl-ent\">description<\/span>&gt;\r\n        &lt;<span class=\"pl-ent\">dependencies<\/span>&gt;\r\n            &lt;<span class=\"pl-ent\">group<\/span> <span class=\"pl-e\">targetFramework<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>.NETStandard1.4<span class=\"pl-pds\">\"<\/span><\/span>&gt;\r\n                &lt;<span class=\"pl-ent\">dependency<\/span> <span class=\"pl-e\">id<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>NETStandard.Library<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-e\">version<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>1.6.1<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-e\">exclude<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>Build,Analyzers<span class=\"pl-pds\">\"<\/span><\/span> \/&gt;\r\n            &lt;\/<span class=\"pl-ent\">group<\/span>&gt;\r\n        &lt;\/<span class=\"pl-ent\">dependencies<\/span>&gt;\r\n    &lt;\/<span class=\"pl-ent\">metadata<\/span>&gt;\r\n&lt;\/<span class=\"pl-ent\">package<\/span>&gt;<\/pre>\n<\/div>\n<h2><a id=\"user-content-visual-studio-2017-version-153-updates\" class=\"anchor\" href=\"#visual-studio-2017-version-153-updates\"><\/a>Visual Studio 2017 version 15.3 updates<\/h2>\n<h3><a id=\"user-content-side-by-side-sdks\" class=\"anchor\" href=\"#side-by-side-sdks\"><\/a>Side-by-Side SDKs<\/h3>\n<p>Visual Studio now has the ability to recognize the install of an updated .NET Core SDK and light up corresponding tooling within Visual Studio. With 15.3, Visual Studio now provides side-by-side support for .NET Core SDKs and defaults to utilizing the highest version installed in the machine when creating new projects while giving you the flexibility to specify and use older versions if needed, via the use of global.json file. Thus, a single version of Visual Studio can now build projects that target different versions of .NET Core.<\/p>\n<h3><a id=\"user-content-support-for-visual-basic\" class=\"anchor\" href=\"#support-for-visual-basic\"><\/a>Support for Visual Basic<\/h3>\n<p>In addition to supporting C# and F#, 15.3 now also supports using Visual Basic to develop .NET Core apps. Our aim with Visual Basic this release was to enable .NET Standard 2.0 class libraries. This means Visual Basic only offers templates for class libraries and console apps at this time, while C# and F# also include templates for ASP.NET Core 2.0 apps. Keep an eye on this blog for updates.<\/p>\n<h3><a id=\"user-content-live-unit-testing-support\" class=\"anchor\" href=\"#live-unit-testing-support\"><\/a>Live Unit Testing Support<\/h3>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/test\/live-unit-testing\">Live Unit Testing (LUT)<\/a> is a new feature we introduced in Visual Studio 2017 enterprise edition and with 15.3 it now supports .NET Core. Users who are passionate with Test Driven Development (TDD) will certainly love this new addition. Starting LUT is as simple as turning it ON from the menu bar: Test-&gt;Live Unit Testing-&gt;Start.<\/p>\n<p>When you enable LUT, you will get unit test coverage and pass\/fail feedback live in the code editor as you type. Notice the green ticks and red x\u2019s shown in the code editor in image below.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-14345\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/LUT.png\" alt=\"\" width=\"975\" height=\"628\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/LUT.png 975w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/LUT-300x193.png 300w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/LUT-768x495.png 768w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><a id=\"user-content-ide-productivity-enhancements\" class=\"anchor\" href=\"#ide-productivity-enhancements\"><\/a>IDE Productivity enhancements<\/h3>\n<p>Visual Studio 2017 15.3 has several productivity enhancements to help you write better code faster. We now support <a href=\"https:\/\/docs.microsoft.com\/visualstudio\/ide\/editorconfig-code-style-settings-reference\">.NET naming conventions and formatting rules in EditorConfig<\/a> allowing your team to enforce and configure almost any coding convention for your codebase.<\/p>\n<p>With regards to navigation improvements, we\u2019ve added support for camelCase matching in GoToAll (Ctrl+T), so that you can navigate to any file\/type\/member\/symbol declaration just by typing cases (e.g., \u201cbh\u201d for \u201cBusHelpers.cs\u201d). You\u2019ll also notice suggested variable names (Fig.2) as you are typing (which will adhere to any code style configured in your team\u2019s EditorConfig).<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-14347\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/var_name_suggestion.png\" alt=\"\" width=\"1342\" height=\"191\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/var_name_suggestion.png 1342w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/var_name_suggestion-300x43.png 300w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/var_name_suggestion-768x109.png 768w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/var_name_suggestion-1024x146.png 1024w\" sizes=\"(max-width: 1342px) 100vw, 1342px\" \/><\/p>\n<p>We\u2019ve added a handful of new refactorings including:<\/p>\n<ul>\n<li>Resolve merge conflict<\/li>\n<li>Add parameter (from callsite)<\/li>\n<li>Generate overrides<\/li>\n<li>Add named argument<\/li>\n<li>Add null-check for parameters<\/li>\n<li>Insert digit-separators into literals<\/li>\n<li>Change base for numeric literals (e.g., hex to binary)<\/li>\n<li>Convert if-to-switch<\/li>\n<li>Remove unused variable<\/li>\n<\/ul>\n<h3><a id=\"user-content-project-system-simplifications\" class=\"anchor\" href=\"#project-system-simplifications\"><\/a>Project System simplifications<\/h3>\n<p>We further simplified the .csproj project file by removing some unnecessary elements that were confusing to users and wherever possible we now derive them implicitly. Simplification trickles down to Solution Explorer view as well. Nodes in Solution Explorer are now neatly organized into categories within the Dependencies node, like NuGet, project-to-project references, SDK, etc.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-14355\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2017\/08\/proj_system_simplification.1.png\" alt=\"\" width=\"380\" height=\"487\" \/><\/p>\n<p>Another enhancement made to the .NET Core project system is that it is now more efficient when it comes to builds. If nothing changed and the project appears to be up to date since the last build, then it won\u2019t waste build cycles.<\/p>\n<h2><a id=\"user-content-docker\" class=\"anchor\" href=\"#docker\"><\/a>Docker<\/h2>\n<p>Several important <a href=\"https:\/\/github.com\/dotnet\/announcements\/issues?q=is%3Aissue+is%3Aopen+label%3ADocker\">improvements<\/a> were made to .NET Core support for Docker during the 2.0 project.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/28\">Docker latest tag moved to .NET Core 2.0<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/27\">microsoft\/dotnet Docker Hub README adopted segmented OS\/Arch style<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/29\">Linux ARM32 Docker images are now available<\/a>.<\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/16\">.NET Core 2.0 multi-arch tags now use Debian Stretch<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/14\">.NET Core Docker images use multi-arch based tags<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/announcements\/issues\/18\">.NET Core supports Multi-Stage Build<\/a><\/li>\n<\/ul>\n<h2><a id=\"user-content-support-and-lifecycle\" class=\"anchor\" href=\"#support-and-lifecycle\"><\/a>Support and Lifecycle<\/h2>\n<p>.NET Core 2.0 is a new release, <a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/microsoft-support.md\">supported by Microsoft<\/a> . You can start using it immediately for development and production.<\/p>\n<p>Microsoft has two support levels: Long Term Support (LTS) and Current release. LTS releases have three years of support and Current releases are shorter, typically around a year, but potentially shorter. .NET Core 1.0 and 1.1 are LTS releases. You can read more about these support levels in the <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/net-support-and-versioning\/\">.NET Support and Versioning<\/a> post. In that post, &#8220;Current&#8221; releases are referred to as &#8220;Fast Track Support&#8221;.<\/p>\n<p>.NET Core 2.0 is a Current release. We are waiting to get your feedback on quality and reliability before switching to LTS support. In general, we want to make sure that LTS releases are at the stage where we only need to provide security fixes for them. Once you deploy an app with an LTS release, you shouldn&#8217;t have to update it much, at least not due to platform updates.<\/p>\n<h3><a id=\"user-content-net-core-11\" class=\"anchor\" href=\"#net-core-11\"><\/a>.NET Core 1.1<\/h3>\n<p>.NET Core 1.1 has transitioned to LTS Support, adopting the same LTS timeframe as .NET Core 1.0.<\/p>\n<p>.NET Core 1.0 and 1.1 will both go out of support on June 27, 2019 or 12 months after the .NET Core 2.0 LTS release, whichever is shorter.<\/p>\n<p>We recommend that all 1.0 customers move to 1.1, if not to 2.0. .NET Core 1.1 has important usability fixes in it that make for a significantly better development experience than 1.0.<\/p>\n<h3><a id=\"user-content-red-hat\" class=\"anchor\" href=\"#red-hat\"><\/a>Red Hat<\/h3>\n<p>Red Hat also provides full support for .NET Core on RHEL and will be providing a distribution of .NET Core 2.0 very soon. We\u2019re excited to see our partners like Red Hat follow our release so quickly. For more information head to <a href=\"http:\/\/www.RedHatLoves.NET\">RedHatLoves.NET<\/a>.<\/p>\n<h2><a id=\"user-content-closing\" class=\"anchor\" href=\"#closing\"><\/a>Closing<\/h2>\n<p>We&#8217;re very excited on this significant milestone for .NET Core. Not only is the 2.0 release our fastest version of .NET ever, the .NET Standard 2.0 delivers on the promise of .NET everywhere. In conjunction with the Visual Studio family, .NET Core provides the most productive development platform for developers using MacOS or Linux as well as Windows. We encourage you to download the latest .NET Core SDK from <a href=\"https:\/\/dot.net\/core\">https:\/\/dot.net\/core<\/a> and start working with this new version of .NET Core.<\/p>\n<p>Please share feedback and any issues you encounter at\u00a0<a href=\"https:\/\/github.com\/dotnet\/core\/issues\/812\">dotnet\/core #812<\/a>.<\/p>\n<p>Watch the <a href=\"https:\/\/aka.ms\/dotnetcore2launchvideo\">launch video for .NET Core 2.0<\/a> to see this new release in action.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>.NET Core 2.0 is available today as a final release. You can start developing with it at the command line, in your favorite text editor, in Visual Studio 2017 15.3, Visual Studio Code or Visual Studio for Mac. It is ready for production workloads, on your own hardware or your favorite cloud, like Microsoft Azure. [&hellip;]<\/p>\n","protected":false},"author":336,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685],"tags":[],"class_list":["post-14265","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet"],"acf":[],"blog_post_summary":"<p>.NET Core 2.0 is available today as a final release. You can start developing with it at the command line, in your favorite text editor, in Visual Studio 2017 15.3, Visual Studio Code or Visual Studio for Mac. It is ready for production workloads, on your own hardware or your favorite cloud, like Microsoft Azure. [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/14265","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\/336"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=14265"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/14265\/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=14265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=14265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=14265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}