.NET 5 μΉ μμ©νλ‘κ·Έλ¨μ .NET 6 μΉ μμ©νλ‘κ·Έλ¨μΌλ‘ λ³ννκ³ , κ΄λ ¨ λ΄μ©μ μμ½ν΄μ μμ±νμ΅λλ€.
Target Project
GitHub: bbonkr/bing-wallpaper μΉ μμ©νλ‘κ·Έλ¨μ λμ νλ μμν¬λ₯Ό .NET 5 μμ .NET 6(μΌ)λ‘ λ³κ²½ν©λλ€.
Requirements
- λμ νλ μμν¬λ₯Ό .NET 6(μΌ)λ‘ λ³κ²½
- Program.cs νμΌμ λ΄μ©μ μ΅μμ λ¬Έ (Top level statements) μΌλ‘ μ¬μμ±
- νμΌ λ²μ λ€μμ€νμ΄μ€ (File scoped namespace) λ₯Ό μ¬μ©
Task logs
Change target framework
.NET 5 μΉ μμ©νλ‘κ·Έλ¨μ .NET 6 μΉ μμ©νλ‘κ·Έλ¨μΌλ‘ λ³κ²½νλ μμ μ λ€λ₯Έ μ΄μκ° μμΌλ©΄ λ§€μ° κ°λ¨ν μμ μ λλ€.
νλ‘μ νΈ νμΌμ νΈμ§κΈ°λ‘ μ΄κ³ , TargetFramework μμμ κ°μ net5.0
μμ net6.0
μΌλ‘ λ³κ²½νλ©΄ κΈ°λ³Έ μμ
μ λμ
λλ€.
μ¬μ©μ€μΈ (μμ‘΄) ν¨ν€μ§κ° .NET 6 μμ μ¬μ©ν μ μλ€λ©΄ λ¬Έμ κ° λ°μν μ μμΌλ―λ‘, λμ νλ μμν¬λ₯Ό λ³κ²½νκΈ° μ μ μ¬μ©μ€μΈ (μμ‘΄) ν¨ν€μ§κ° .NET 6 μμ μ¬μ©κ°λ₯νμ§ κ²ν ν μ§νμ¬λΆλ₯Ό κ²°μ ν΄μΌ ν©λλ€.
Top level statements
.NET 6 (μ)λ₯Ό λμμΌλ‘ μΉ μμ©νλ‘κ·Έλ¨ νλ‘μ νΈλ₯Ό μμ±νλ©΄, Program.cs νμΌμ μ΅μμ λ¬ΈμΌλ‘ μΉμμ©νλ‘κ·Έλ¨(WebApplication) ꡬμ±νλ μ½λκ° μ 곡λ©λλ€.
.NET 5 λ‘ μμ±λ μΉ μμ©νλ‘κ·Έλ¨ μ½λλ λ§€μ° κ°νΈνκ² μ΅μμ λ¬Έμ μ¬μ©νλλ‘ μ½λλ₯Ό λ³κ²½ν μ μμ΅λλ€.
Program.cs νμΌμ κΈ°μ‘΄ μ½λλ κ·Έλλ‘ λ¨κ²¨λκ³ , νμΌμ΄ λ§μ§λ§ μ€μ μμ±μ μμν©λλ€.
λ¨Όμ , μΉ μμ©νλ‘κ·Έλ¨ λΉλ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
var builder = WebApplication.CreateBuilder(args);
νΈμλ₯Ό μν΄ κ΅¬μμ μ€μ ν©λλ€.
var builder = WebApplication.CreateBuilder(args);
// configure service
// [1]
// configure
// [2]
// run
// [3]
[1] λΆλΆμλ Startup.cs
νμΌμ ConfigureServices
λ©μλμ μ½λλ₯Ό κ°μ Έμ΅λλ€.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// μλ΅
services.AddControllersWithViews();
// μλ΅
}
}
ConfigureServices
λ©μλμ λ΄μ©μ κ°μ Έμ¨ ν builder.Services
μμ±μ μ¬μ©ν΄μ μλμ κ°μ΄ μμ±λ μ μμ΅λλ€.
var builder = WebApplication.CreateBuilder(args);
// configure service
// μλ΅
builder.Services.AddControllersWithViews();
// μλ΅
// configure
// [2]
// run
// [3]
[2] λΆλΆμλ Startup.cs
νμΌμ Configure
λ©μλμ μ½λλ₯Ό κ°μ Έμ΅λλ€.
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// μλ΅
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
// μλ΅
}
}
Configure
λ©μλμ λ΄μ©μ κ°μ Έμ¨ ν μλμ κ°μ΄ μμ±λ μ μμ΅λλ€.
var builder = WebApplication.CreateBuilder(args);
// configure service
// μλ΅
builder.Services.AddControllersWithViews();
// μλ΅
// configure
var app = builder.Build();
// μλ΅
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
// μλ΅
// run
// [3]
λ€λ₯Έ ꡬμ±μ app.Services μμ±, app.Environment μμ±μ μ°Έμ‘°νλ©΄ λμΌνκ² μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
[3] λΆλΆμλ Program.cs
μ μμ±λμ΄ μλ Main λ©μλμ λ΄μ©μ κ°μ Έμ΅λλ€.
μμ±λ Program.cs
νμΌμ μλμ κ°μ΅λλ€.
var builder = WebApplication.CreateBuilder(args);
// configure service
// μλ΅
builder.Services.AddControllersWithViews();
// μλ΅
// configure
var app = builder.Build();
// μλ΅
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
// μλ΅
// run
app.run();
μ΄ν, Program.cs
νμΌμ κΈ°μ‘΄ λ΄μ© namespace ν¬ν¨ν΄μ Program
ν΄λμ€λ₯Ό μ κ±°ν©λλ€.
Use File scoped namespace
λλ¨Έμ§ νμΌμ νλμ© μ΄μ΄μ λ€μμ€νμ΄μ€ λΈλμ νμΌ λ²μ λ€μμ€νμ΄μ€λ‘ λ³κ²½ν©λλ€.
νλ²μ μ μ©νλ λ°©λ²μ μμ§ λͺ»μ°Ύμμ νλμ© λ³κ²½νμ΅λλ€.
using System;
namespace SomeNamesapce {
// μλ΅
}
μλμ κ°μ΄ λΈλμ μ κ±°νλ μμ μ λλ€.
using System;
namespace SomeNamesapce;
// μλ΅
Visual Studio λ₯Ό μ¬μ©μ€μ΄λ©΄, namespace μ΄λ¦μμ 컨ν μ€νΈ λ©λ΄ (Ctrl + .)λ₯Ό νμΈνλ©΄ νμΌ λ²μ λ€μμ€νμ΄μ€λ‘ λ³κ²½ λ©λ΄κ° μμ΅λλ€.
Dockerfile
λ컀 μ΄λ―Έμ§ λΉλλ₯Ό μ¬μ©μ€μ΄λ©΄, λΉλ μ΄λ―Έμ§μ λ°νμ μ΄λ―Έμ§λ₯Ό λ³κ²½ν©λλ€.
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
# μλ΅
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
# μλ΅
μλμ κ°μ΄ .NET 6 νκ²½μΌλ‘ λ³κ²½ν©λλ€.
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
# μλ΅
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
# μλ΅
CI/CD Environment
GitHub Action λλ Azure pipeline λ± λ€λ₯Έ CI/CD λ₯Ό μ¬μ©μ£Όμ΄λ©΄ μμ μ μμμ νκ²½ ꡬμ±μ μ¬μ©λλ .NET SDK λ²μ μ .NET 6 (μΌ)λ‘ λ³κ²½ν©λλ€.
GitHub Actions μ actions/setup-dotnet@v1
ν¨ν€μ§μ νκ²½λ³μ κ°μ 6.0.x λ‘ μ§μ ν©λλ€.
# μλ΅
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
# μλ΅
- name: Setup dotnet
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
# μλ΅
Conclusion
.NET 6 (μΌ)λ‘ λμ νλ μμν¬ λ³κ²½λ§μΌλ‘ μ±λ₯ν₯μμ΄ μλ€κ³ νλ, μκ°λμ€ λ λ³κ²½ν΄λ³΄μλ©΄ μ’μ κ² κ°μ΅λλ€.
μ€μ μμ±λ .NET 6 (μΌ)λ‘ λ³κ²½μμ μ νμΈνκ³ μΆμΌμλ©΄ GitHub: bbonkr/bing-images feature/dotnet6 branch μμ μ½λ λ³κ²½μ¬νμ μ°Έμ‘°νμμμ€.