ASP.NET Core 2.0 e
.Net Standard 2.0
Victor Cavalcante
@vcavalcante
vcavalcante@lambda3.com.br
VICTOR CAVALCANTE
- Desenvolvedor Web
- Microsoft MVP de ASP.NET
- vcavalcante@lambda3.com.br
- @vcavalcante
O que é .Net Standard, .Net Core, ASP.Net Core?
Application Framework
"Você está usando o ASP.NET CORE web framework para estes micro serviço?"
Metapackage
"Eu quero instalar o ASP.NET Core Framework; Ele é um pacote de pacotes"
Package Nuget
"Eu sei que existe um pacote NuGet para tratar esse JSON."
Library / Assembly
"Agora, você irá compilar seu código em uma assembly"
.NET Standard
"Qual versão da especificação .Net Standard sua assembly está apontando?"
"Meu Apple Watch suporta .NET Standard 1.6 mas meu computador com Windows 10 suporta 2.0 com muito mais APIs"
C#, F#, VB, etc
"Qual linguagem você está usando"
.NET SDK
"Você já instalou a ferramenta de desenvolvedor?"
CLR/CoreCLR
"Qual runtime a sua app está usando?"
"Você está usando .NET Core, .NET Framework, or Mono para este projeto?"
Uma implementação do .NET é um runtime junto com bibliotecas que implementam uma versão do .NET Standard
"Esta aplicação ASP.NET Core está rodando em um Docker dentro de um Raspberry PI?"
Pense no .NET Standard como a especificação do HTML
Nesse contexto o browser é o .NET Core
E eu com isso?
O que eu ganho?
Compartilhado
.NET
Core
.NET
Framework
Compartilhado
.NET
Core
.NET
Framework
WPF
Web
Forms
WCF
Especificado no .NET Standard
.NET Standard
-
Adiciona APIs
-
Mais que dobra o número de APIs
-
-
Permite consumir pacotes criados para outras plataformas (como .NET Framework)
-
Implementada no .NET Core 2 e .NET Framework 4.6.1
.NET Core 2
-
Suporta .NET Standard 2
-
Novos OSs (Tizen, Arch Linux, FreeBSD, etc)
-
APIs do ASP.NET Core incluídas
-
Evoluções no tooling (independência do VS)
-
Melhorias de desempenho
-
Suporte a VB
ASP.NET Core 2
ASP.NET Core metapackage
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
</Project>
Runtime package store
Pacotes menores e deploys mais rápidos
Automatic precompilation
WebHost.CreateDefaultBuilder
public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
var builder = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) => {
/* setup config */
})
.ConfigureLogging((hostingContext, logging) => {
/* setup logging */
})
.UseIISIntegration()
.UseDefaultServiceProvider((context, options) => {
/* setup the DI container to use */
})
.ConfigureServices(services =>
{
services.AddTransient<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>();
});
return builder;
}
CreateDefaultBuilder
public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
var builder = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
if (env.IsDevelopment())
{
var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
if (appAssembly != null)
{
config.AddUserSecrets(appAssembly, optional: true);
}
}
config.AddEnvironmentVariables();
if (args != null)
{
config.AddCommandLine(args);
}
})
ConfiguraAppConfiguration
public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
var builder = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) => {
/* setup config */
})
.ConfigureLogging((hostingContext, logging) => {
logging.UseConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
})
.UseIISIntegration()
.UseDefaultServiceProvider((context, options) => {
/* setup the DI container to use */
})
.ConfigureServices(services =>
{
services.AddTransient<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>();
});
return builder;
}
ConfigureLogging
Hosting Startup &
Application Insights
Templates SPA
Razor Pages
@page
@model IndexModel
@using Microsoft.AspNetCore.Mvc.RazorPages
@functions {
public class IndexModel : PageModel
{
public string Message { get; private set; } = "In page model: ";
public void OnGet()
{
Message += $" Server seconds { DateTime.Now.Second.ToString() }";
}
}
}
<h2>In page sample</h2>
<p>
@Model.Message
</p>
@page
@using RazorPages
@model IndexModel2
<h2>Separate page model</h2>
<p>
@Model.Message
</p>
using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
namespace RazorPages
{
public class IndexModel2 : PageModel
{
public string Message { get; private set; } = "PageModel in C#";
public void OnGet()
{
Message += $" Server time is { DateTime.Now }";
}
}
}
Dúvidas, Críticas ou Sugestões?
@vcavalcante
vcavalcante@lambda3.com.br
ASP.NET CORE 2.0 E ASP.NET STANDARD 2.O
By Victor Cunha Cavalcante
ASP.NET CORE 2.0 E ASP.NET STANDARD 2.O
- 1,594