View
141
Download
1
Category
Preview:
Citation preview
O mnie
Technical Advisor & Internal Trainer @ Future Processing
@michaldudak
github.com/michaldudak
blog.dudak.me
Agenda
.NET Framework 4.6 vs .NET Core 5
C# 6.0 i Roslyn
Visual Studio 2015
ASP.NET 5
Entity Framework 7
.NET Framework 4.6
Brak rewolucyjnych zmian w stosunku do .NET Framework
4.5
Nowości:
Obsługa ASP.NET 5
Nowy kompilator just-in-time (RyuJIT)
Kontrola nad garbage collectorem
Więcej komponentów z asynchronicznym API
.NET Native dla aplikacji Windows Store
Reference source na licencji MIT
http://sourceof.net
https://github.com/Microsoft/referencesource
.NET Core 5
Mały podzbiór (core) .NET Frameworka
Biblioteki (BCL) + środowisko uruchomieniowe (CoreCLR)
Modularyzacja
BCL dostępny przez NuGet
Open source na licencji MIT (docelowo)
Łącznie z garbage collectorem i JITem
Development prowadzony na GitHubie
CoreCLR
Środowisko uruchomieniowe dla .NET Core
Optymalizacja pod środowiska serwerowe
Możliwość używania wielu wersji na tej samej maszynie
Wieloplatformowość (docelowo)
C# 6.0: Null-conditional
int? length = null;
if (customers != null)
{
length = customers.Length;
}
int? length = customers?.Length;
C# 6.0: Null-conditional
Customer first = null;
if (customers != null)
{
first = customers[0];
}
Customer first = customers?[0];
C# 6.0: Null-conditional
if (PropertyChanged != null)
{
PropertyChanged(this, args);
}
PropertyChanged?.Invoke(this, EventArgs.Empty);
C# 6.0: Inicjalizatory właściwości
public string EventName { get; set; } = "4Developers"
public string EventName { get; } = "4Developers"
C# 6.0: Filtrowanie wyjątków
try { … }
catch (MyException e)
{
if (e.ErrorLevel <= 2)
throw;
…
}
try
{ … }
catch (MyException ex) if (ex.ErrorLevel > 2)
{ … }
C# 6.0: Primary constructors
public class Conference
{
public string Name { get; set; }
public string Date { get; private set; }
public Conference(string name, DateTime date)
{
Name = name;
Date = date;
}
}
public class Conference(string name, DateTime date)
{
public string Name { get; set; } = name;
public DateTime Date { get; } = date;
}
public int Add(int x1, int x2)
{
return x1 + x2;
}
public string FullName { get { return FirstName + " " + LastName; } }
public int Add(int x1, int x2) => x1 + x2;
public string FullName => FirstName + " " + LastName;
C# 6.0: Metody i właściwości definiowane przez wyrażenia lambda
C# 6.0: Using klas statycznych
using System.Console;
using System.Math;
public class Program
{
public void Main()
{
WriteLine(Sqrt(3 * 3 + 4 * 4));
}
}
C# 6.0: Interpolacja stringów
String.Format("{0,20} is {1:D3} years old", p.Name, p.Age);
$"{p.Name,20} is {p.Age:D3} years old";
Roslyn
.NET Compiler Platform
C# i Visual Basic
API do użycia w kodzie
Narzędzia do refaktoryzacji i analizy kodu
Aplikacje kompilujące się w locie
Wykorzystywany przez Visual Studio 2015 i ASP.NET 5
Visual Studio 2015
Emulator urządzeń z Androidem
Zintegrowane narzędzia Apache Cordova
Rozszerzone wsparcie dla Xamarin
Poprawki w edytorze WPF
Nowa wersja edytora Blend
Szersza integracja z Visual Studio
Wsparcie dla narzędzi Grunt, Gulp i Bower
Edycje Express, Community, Professional i Enterprise
Visual Studio Community Edition
Odpowiednik edycji Professional
Jedno IDE dla wszystkich platform
Rozszerzalność
Można używać:
Do nauki
Do projektów open source
Komercyjnie przez pojedynczych developerów i małe firmy
Max. 5 instalacji
Nie można używać:
Komercyjnie przez korporacje
ASP.NET 5: Brak System.Web
Cały ASP.NET poza corem .NETa
Brak handlerów, modułów, Global.asax, itp.
Brak obsługi WebForms
ASP.NET 5: Nowa struktura projektów
Project.json
Konfiguracja zależności
Ustawienia specyficzne dla frameworków
Zależności do paczek nuget
Wszystkie pliki z folderu domyślnie w projekcie
Możliwość dołączenia CLR
Brak (prawie) plików web.config
ASP.NET 5: Hostowanie poza IIS
Self-hosting
Custom host
Kestrel
IIS nadal pozostaje rekomendowanym serwerem
ASP.NET 5: Wieloplatformowość
Kestrel
Serwer oparty o libuv
Działa na Mono
Linux, Mac
Docelowo na .NET Core
ASP.NET 5: Narzędzia
Visual Studio 2015
Pluginy do popularnych edytorów kodu
Sublime Text
Brackets
Vim
Atom
…
Narzędzia konsolowe
dnx
dnu
dnvm
nuget
ASP.NET MVC 6
Połączone MVC, WebAPI i WebPages
Zunifikowane typy, routing, DI
Szerzej wykorzystywane DI
Brak staticów (RouteTable, GlobalConfiguration, itd.)
Kontrolery niewymagające klasy bazowej
Asynchroniczność
Tag Helpers
@Html.TextBoxFor(m => m.Name, new { @class = ”form-control” })
<input asp-for=”Name” class=”form-control” />
ASP.NET 5: Przykład aplikacji
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
app.Use(async (ctx, next) =>
{
await ctx.Response.WriteAsync("Hello, 4Developers!");
await next();
});
}
}
Entity Framework 7
Przepisany od zera
Lekki i rozszerzalny
Wieloplatformowy
Aplikacje desktopowe
ASP.NET
Windows Store
Windows Phone
Wsparcie dla baz relacyjnych i NoSQL
Azure Table Storage
Redis
Tylko model Code First
Brak modelu EDMX
Entity Framework 7
Co się nie zmienia
DbContext, DbSet<T>
LINQ
Spora część publicznego API
Co nowego
Łączenie poleceń (batch)
Implementacja constrainta Unique
Provider InMemory
Entity Framework 7
Co się zmienia
Część zapytania przetwarzana w aplikacji
Czego nie będzie
ObjectContext
EDMX
Złożone mapowanie klas do tabel
MEST
Entity Framework 7
Nie wszystkie nowe funkcje będą dostępne od razu
Gałąź 6.x będzie rozwijana niezależnie (przez „pewien czas”)
Recommended