Victor Cavalcante
@vcavalcante
vcavalcante@lambda3.com.br
"Você está usando o ASP.NET CORE web framework para estes micro serviço?"
"Eu quero instalar o ASP.NET Core Framework; Ele é um pacote de pacotes"
"Eu sei que existe um pacote NuGet para tratar esse JSON."
"Agora, você irá compilar seu código em uma assembly"
"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"
"Qual linguagem você está usando"
"Você já instalou a ferramenta de desenvolvedor?"
"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?"
O que eu ganho?
Compartilhado
.NET
Core
.NET
Framework
Compartilhado
.NET
Core
.NET
Framework
WPF
Web
Forms
WCF
Especificado no .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
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
<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>
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
@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 }";
}
}
}