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

Made with Slides.com