youtu.be/E17rD75Kn9Q

 

Visual Studio 2019 16.8 릴리즈 내용 중 몇가지를 소개하는 동영상입니다. 이 내용을 포함하는 블로그를 찾아봤는데 없어서 직접 작성하도록 하겠습니다.

 

Customizing your Visual Studio environment

. Themes

Visual Studio 2019에 다양한 테마를 테마를 적용할 수 있으며, 자신만의 테마를 만들 수도 있습니다.

 

Extensions -> Manage Extensions

Visual Studio 2019의 컬러 테마를 수정할 수 있는 확장입니다.

Visual Studio 2019의 Dark 테마와 비슷하지만 컬러가 좀 다른 테마입니다. 그 외에 theme로 검색하면 여러가지 테마가 조회가 되니 마음에 드시는 테마를 다운 받아서 설치하시면 될 것 같습니다.

테마를 변경하기 위해서는 Tools -> Options -> Environment -> General에서 변경하실 수 있습니다.

Visual Studio 2019의 전체 컬러도 그냥 검은색이 아니라 약간 다른 검은색으로 변경되면서 코드에 보이는 컬러도 변경됩니다. 여러가지를 변경해 봐야 마음에 드는 것 찾을 수 있을 것 같습니다.

 

. .NET Core Templates

새로운 프로젝트를 만들기 위해서 File -> New -> Project를 선택하고 프로젝트 템플릿 하나를 선택해서 프로젝트를 생성하게 됩니다. 그런데, 비슷한 프로젝트를 계속 만들려고 하면, 동일한 작업을 매번 반복하게 됩니다. 

그래서, 기본적인 프로젝트 구성을 완료하고 그 상태를 커스텀 템플릿으로 만드는 기능이 추가되었습니다.

 

Project -> Export Template...

Next 버튼을 클릭합니다.

템플릿 이름을 정하고, 아이콘 파일을 선택하고 Finish를 클릭합니다. 완료되면, 템플릿이 만들어진 폴더가 열립니다. 이제 프로젝트를 만들어 보도록 하겠습니다.

검색하는데 엄청 시간이 걸리기는 했지만 검색이 가능합니다. 몇 분만 참으시면 됩니다.

프로젝트를 생성했는데, 제가 입력했던 내용들과 Nuget package들까지도 모두 정상적으로 만들어집니다.

오오~ 이 기능 마음에 듭니다. 매번 동일한 작업을 반복하는 것이 매우 싫었는데, 이제라도 추가되어서 참 좋은 것 같습니다. 하지만, 멀티 프로젝트는 지원이 않됩니다. 즉, Uno Platform은 템플릿을 만들 수 없는 것 같습니다. ㅜㅜ 추후에는 솔루션 단위로 가능하면 좋겠습니다.

 

. Solution Filters

규모가 큰 솔루션은 매우 많은 프로젝트를 포함하고 있습니다. 이런 솔루션 파일을 열게되면, Visual Studio 2019에서 모든 프로젝트를 로드하는데 시간이 오래 걸립니다. 그런데, 이제는 모든 프로젝트를 로드할 필요가 없습니다.

 

File -> Open Project/Solution

솔루션 열기 다이얼로그 창 하단에 Do not load projects라는 체크 박스가 있습니다. 이 체크박스를 체크하고 솔루션 파일을 선택하면 프로젝트를 로드하지 않은 상태로 시작됩니다.

모든 프로젝트가 언로드 상태로 솔루션이 열렸습니다.

내가 로드할 프로젝트만 선택한 후 Reload project를 선택합니다. 그렴 딱 필요한 프로젝트만 열 수 있습니다. 그리고, 솔루션 아이템을 선택하고 마우스 오른쪽을 누른 후 Hide Unloaded Projects 메뉴를 선택합니다.

그러면, Unloaded projects들은 보이지 않습니다. 마지막으로, 솔루션 아이템에서 마우스 오른쪽 클릭을 다시하고 메뉴에서 Save as Solution Filter를 선택 합니다.

이름을 입력하고 Save를 클릭합니다.

이제 솔루션이 있는 폴더에 UnoContoso_UWP_Only.slnf 라는 파일이 생성되었습니다. 그리고, 이 파일을 Visual Studio 2019로 열면 저장한 상태로 솔루션이 Open됩니다. 

이 기능은 정말 최고입니다. 더 자세한 사항은 여기를 참고 합니다.

 

. Configurable File Nesting

ASP.NEt Core 프로젝트에서만 사용 가능한 기능으로 솔루션에서 관련 파일을 중첩하여 구성하고 찾을 수 있도록 지원하는 기능입니다. 자세한 사항은 여기를 참고 합니다.

 

//아래는 몇일 후에 작업 완료 하겠습니다. 다시 찾아주세요~

Productivity tools

. IntelliCode Team Completions

IntelliCode의 기본 모델 제안은 오픈 소스 GitHub 저장소에서 학습 한 패턴만을 기반으로하기 때문에 만약 고유 한 유형 또는 도메인 별라이브러리를 사용하는 경우에는 제안이 유용하지 않을 수 있습니다. 이러한 경우에 Visual Studio에서 C# 및 C++ 사용자가 직접 IntelliCode를 사용하여 코드에서 패턴을 학습시켜 코드에 맞는 제안을 만들 수 있습니다.

 

이 항목에 대한 더 자세한 사항은 여기를 참고 합니다.

. IntelliCode Suggestions

여러 위치에 유사한 편집을 수행 할 때 도움이 되는 기능이 추가되었습니다. 사용자가 비슷한 코드를 반복적으로 수정하는 경우에 그 내용을 추적하고 반복을 감지합니다. 그런 다음 적용 할 수 있는 다른 위치에 동일한 편집을 적용 할 것을 제안하게 됩니다.

이 기능은 Visual Studio 2019의 Quick Fix(Ctrl+.) 기능을 이용해서 사용할 수 있습니다.

세션에서 반복되는 편집을 통해 학습하기 때문에 IntelliCode Suggestion은 때때로 의도에 맞지 않는 제안을 합니다. 그런 경우에는 제안 무시를 선택하시면 됩니다.

이 기능에 대한 더 자세한 사항은 여기를 참고합니다.

. Web Live View

ASP.NET에 Xamarin Hot Reload 기능과 같은 실행 상태에서 HTML, CSS 등을 수정해서 화면에서 바로 확인할 수 있는 기능이 추가되었습니다. 이 기능을 이용하기 위해서는 Extension에서 web live로 검색을 하신후 선택해서 설치하시면 됩니다.

이 Web Live Preview 기능에 대한 자세한 사항은 여기를 참고 합니다.

 

'Visual Studio' 카테고리의 다른 글

What's New in Visual Studio 2019 version 16.8  (0) 2020.11.26
Welcome to C# 9.0  (0) 2020.11.24
Announcing .NET 5.0 RC1  (0) 2020.10.08
What's new in ML.NET  (0) 2020.06.17
Modernizing .NET Desktop Applications with .NET Core  (0) 2019.10.07
What's New In C# 8.0 Part 2  (0) 2019.09.30
블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

Welcome to C# 9.0

Visual Studio 2020. 11. 24. 21:25

C# 9.0이 릴리즈 되었습니다. 어떤 기능이 추가되었는지 블로그 포스트를 참고해서 간단하게 작성해 보았습니다.

 

C# 9.0 on the record | .NET Blog (microsoft.com)

 

C# 9.0 on the record | .NET Blog

C# 9.0 on the record It’s official: C# 9.0 is out! Back in May I blogged about the C# 9.0 plans, and the following is an updated version of that post to match what we actually ended up shipping. With every new version of C# we strive for greater clarity

devblogs.microsoft.com

Init-only properties

일반적으로 객체를 생성하는 간단한 방법이 있습니다. 특히 이 방법은 전체 객체 트리를 한번에 생성할 수 있어서 매우 유용합니다.

var person = new Person { FirstName = "Mads", LastName = "Torgersen" };

객체를 만들 클래스는 몇개의 간단한 속성을 가지고 있습니다

public class Person
{
    public string? FirstName { get; set; }
    public string? LastName { get; set; }
}

그런데, 여기에는 큰 제한이 있습니다. 객체 생성시 데이터를 입력하기 위해서는 프로퍼티의 속성이 변경 가능해야 한다는 것입니다. 그래서, 초기화 전용 속성인 init를 추가했습니다.

public class Person
{
    public string? FirstName { get; init; }
    public string? LastName { get; init; }
}

이 방법을 사용하면 위의 클라이언트 코드는 여전히 유효하지만 프로퍼티에 추후 값을 변경할때는 오류가 발생합니다.

var person = new Person { FirstName = "Mads", LastName = "Nielsen" }; // OK
person.LastName = "Torgersen"; // ERROR!

따라서, 초기화 전용 속성은 초기화가 완료되면 객체의 상태 변화를 막을 수 있습니다.

Init accessors and readonly fields

init 접근자는 초기화 중에만 호출 할 수 있기 때문에 클래스의 읽기 전용 필드를 변경할 수 있습니다.

public class Person
{
    private readonly string firstName = "<unknown>";
    private readonly string lastName = "<unknown>";
    
    public string FirstName 
    { 
        get => firstName; 
        init => firstName = (value ?? throw new ArgumentNullException(nameof(FirstName)));
    }
    public string LastName 
    { 
        get => lastName; 
        init => lastName = (value ?? throw new ArgumentNullException(nameof(LastName)));
    }
}

Records

고전적인 객체 지향 프로그래밍의 핵심은 객체가 강력한 정체성을 가지고 있으며, 시간이 지남에 따라 진화하는 가변 상태를 캡슐화한다는 아이디어입니다. C#은 항상 이를 잘 수행했지만, 때로는 정반대를 원할 때가 있습니다. 여기서 C#의 기본값은 작업을 방해하는 경향이있어, 작업이 매우 힘들어졌습니다. 전체 객체가 불변하고 값처럼 동작하기를 원하면 이를 Records로 선언하는 것을 고려해야 합니다.

public record Person
{
    public string? FirstName { get; init; }
    public string? LastName { get; init; }
}

record는 여전히 클래스이지만, record 키워드는 몇가지 추가 값 유사 동작을 포함합니다. 일반적으로 기록은 identity가 아닌 value로 정의됩니다. 이와 관련하여 record는 구조체에 훨씬 더 가깝지만 record는 여전히 reference type입니다.

record는 변경 가능하지만 주로 변경 불가능한 데이터 모델을 더 잘 지원합니다.

With-expressions

불변 데이터로 작업 할 때 일반적인 패턴은 기존 값에서 새 값을 만들어 새 상태를 나타내는 것입니다. 예를 들어, 우리가 성을 변경하는 경우 다른 성이있는 경우를 제외하고 이전 개체의 복사 본을 만들어 새 개체를 사용합니다. 이 기술을 종종 비파괴 돌연변이라고 합니다. 시간이 지남에 따라 사람을 나타내는 대신 record는 주어진 시간에 사람의 상태를 나타냅니다. 이러한 스타일의 프로그래밍을 돕기 위해 record는 새로운 종류의 표현인 with를 허용합니다.

var person = new Person { FirstName = "Mads", LastName = "Nielsen" };
var otherPerson = person with { LastName = "Torgersen" };

With-expression은 객체 초기화 구분을 사용하여 이전 객체와 새 객체의 차이점을 표현합니다. 여러 속성을 지정할 수도 있습니다.

 

With-expression은 실제로 이전 객체의 전체 상태를 새 객체에 복사 한 다음 객체 초기화를 하는 방식으로 작동합니다. 즉, 프로퍼티에는 with-expression에서 변경 될수 있는 init 또는 set 접근자가 있어야 합니다.

Value-based equality

모든 객체는 객체 클래스에서 가상 Equals(object) 메서드를 상속합니다. 두 매개 변수가 모두 null이 아닌 경우 Object.Equals(object, object) 정적 메서드의 기반으로 사용됩니다. 구조체는 "값 기반 같음"을 가지도록 재정의하고 Equals를 재귀적으로 호출하여 구조체의 각 필드를 비교합니다. record도 마찬가지로 동작합니다. 이는 "value-ness"에 따라 두 record 객체가 동일한 객체가 아니어도 서로 동일 할 수 있을을 의미 합니다. 예를 들어 수정 된 사람의 성을 다시 수정하는 경우 :

var originalPerson = otherPerson with { LastName = "Nielsen" };

이제 ReferenceEquals(person, originalPerson) = false이지만 Equals(person, originalPerson) = true가 됩니다. 값 기반 Equals와 함께 값 기반 GetHashCode() 재정의도 있습니다. 또한 record는 IEquatable<T>를 구현하고 == 및 != 연산자를 오버로드하므로 값 기반 동작이 모든 서로 다른 같음 메커니즘에서 일관되게 표시됩니다.

Inheritance

Record는 다른 record에서 상속 할 수 있습니다.

public record Student : Person
{
    public int ID;
}

With-expression 및 value equality는 정적으로 알려진 유형 뿐만 아니라 전체 런타임 객체를 고려한다는 점에서 record 상속과 잘 작동합니다. Student를 생성하지만 Person 변수에 저장한다고 가정합니다.

Person student = new Student { FirstName = "Mads", LastName = "Nielsen", ID = 129 };

With-expression은 여전히 전체 객체를 복사하고 런타임 유형을 유지합니다.

var otherStudent = student with { LastName = "Torgersen" };
WriteLine(otherStudent is Student); // true

같은 방식으로 값이 같으면, 두 객체의 런타임 유형이 동일한지 확인한 다음 모든 상태를 비교합니다.

Person similarStudent = new Student { FirstName = "Mads", LastName = "Nielsen", ID = 130 };
WriteLine(student != similarStudent); //true, since ID's are different

Positional records

위치적인 접근 방식이 유용할 때가 있습니다. 여기서 그 내용은 생성자 인수를 통해 제공되고 위치 분해를 통해 추출 할 수 있습니다. record에서 자체 생성자와 해체자를 지정하는 것은 완벽하게 가능합니다.

public record Person 
{ 
    public string FirstName { get; init; } 
    public string LastName { get; init; }
    public Person(string firstName, string lastName) 
      => (FirstName, LastName) = (firstName, lastName);
    public void Deconstruct(out string firstName, out string lastName) 
      => (firstName, lastName) = (FirstName, LastName);
}

그러나, 정확히 동일한 것을 표현하기 위한 훨씬 더 짧은 구문이 있습니다.

public record Person(string FirstName, string LastName);

이것은 공용 초기화 전용 자동 속성과 생성자 및 해체자를 선언하므로 다음과 같이 사용할 수 있습니다.

var person = new Person("Mads", "Torgersen"); // positional construction
var (f, l) = person;                        // positional deconstruction

생성 된 자동 속성이 마음에 들지 않으면 같은 이름의 고유 한 속성을 대신 정의 할 수 있으며, 생성 된 생성자와 해체자는 해당 속성을 사용합니다. 이 경우 매개 변수는 초기화에 사용할 수 있는 범위에 있습니다. 예를 들어 FirstName을 보호 된 속성으로 사용하고 싶다고 가정 해 보겠습니다.

public record Person(string FirstName, string LastName)
{
    protected string FirstName { get; init; } = FirstName; 
}

Positional record는 다음과 같은 기본 생성자를 호출 할 수 있습니다.

public record Student(string FirstName, string LastName, int ID) : Person(FirstName, LastName);

 

Top-level programs

C#으로 간단한 프로그램을 작성하려면, 상당한 양의 상용구 코드가 필요합니다.

using System;
class Program
{
    static void Main()
    {
        Console.WriteLine("Hello World!");
    }
}

이것은 언어 초보자에게 어렵고 느끼게하고, 코드를 복잡하게 만드는 들여 쓰기 수준을 추가하게 됩니다. 그래서, C# 9.0에서는 Top-level 에서 기본 프로그램을 작성할 수 있습니다.

using System;

Console.WriteLine("Hello World!");

모든 코드가 허용됩니다. 프로그램은 using 후와 파일의 유형 또는 네임 스페이스 선언 전에 작성되어야하며, Main 메서드가 하나만 있을 수 있는 것처럼 하나의 파일에서만 그 작업을 수행 할 수 있습니다. 상태코드를 반환하려면, 그렇게 할 수 있습니다. 작업을 기다리고 싶다면, 그렇게 할 수 있습니다. 명령 줄 인수에 액서스하려면 args를 사용할 수 있습니다.

using static System.Console;
using System.Threading.Tasks;

WriteLine(args[0]);
await Task.Delay(1000);
return 0;

로컬 함수는 명령문의 한 형태이며 Top-level 프로그램에서도 허용됩니다. 대신 외부에서 호출하는 것은 오류를 발생합니다.

 

Improved pattern matching

몇 가지 새로운 종류의 패턴이 C#9.0에 추가되었습니다. 패턴 일치 튜토리얼의 이 코드를 살펴 보도록 하겠습니다. 자세한 사항은 여기를 참고하세요.

public static decimal CalculateToll(object vehicle) =>
    vehicle switch
    {
       ...
       
        DeliveryTruck t when t.GrossWeightClass > 5000 => 10.00m + 5.00m,
        DeliveryTruck t when t.GrossWeightClass < 3000 => 10.00m - 2.00m,
        DeliveryTruck _ => 10.00m,

        _ => throw new ArgumentException("Not a known vehicle type", nameof(vehicle))
    };

Simple type patterns

이전에는 형식 패턴이 형식이 일치 할 때 식별자를 선언해야 했습니다. 위의 DeliveryTruck _에서와 같이 해당 식별자가 폐기 _ 인 경우에도 마찬가지입니다. 그러나 이제는 아래와 같이 사용할 수 있습니다.

DeliveryTruck => 10.00m,

Relational patterns

C#9.0에는 관계 연산자 <, <= 등에 해당하는 패턴이 도입되었습니다. 따라서 이제 위 패턴의 DeliveryTruck 부분을 중첩 된 스위치 표현식으로 작성할 수 있습니다.

DeliveryTruck t when t.GrossWeightClass switch
{
    > 5000 => 10.00m + 5.00m,
    < 3000 => 10.00m - 2.00m,
    _ => 10.00m,
},

Logical patterns

마지막으로, 식에 사용되는 연산자와의 혼동을 피하기 위해 패턴을 논리 연산자와 결합 할 수 있습니다. 예를 들어, 위의 중첩 스위치의 경우는 다음과 같이 오름차순으로 배치 될 수 있습니다.

DeliveryTruck t when t.GrossWeightClass switch
{
    < 3000 => 10.00m - 2.00m,
    >= 3000 and <= 5000 => 10.00m,
    > 5000 => 10.00m + 5.00m,
},
not null => throw new ArgumentException($"Not a known vehicle type: {vehicle}", nameof(vehicle)),
null => throw new ArgumentNullException(nameof(vehicle))

또한 다루기 힘든 이중 괄호 대신 is-expression을 포함하는 if 조건에서 편리하게 사용할 수 있습니다.

if (!(e is Customer)) { ... }

상당히 불편하게 느꼈던 부분을 아래 처럼 변경할 수 있습니다.

if (e is not Customer) { ... }

실제로 is not expression은 Customer와 같은 type을 비교할 때도 사용할 수 있습니다.

if (e is not Customer c) { throw ... } // if this branch throws or returns...
var n = c.FirstName; // ... c is definitely assigned here

 

Target-typed new expressions

"Target-typing"은 표현식이 사용되는 컨텍스트에서 유형을 가져올 때 사용하는 용어입니다. 예를 들어 null 및 람다식은 항상 대상 형식입니다. C#의 새 식에는 항상 형식을 지정해야합니다. C# 9.0에서는 표현식이 할당되는 명확한 유형이 있는 경우 유형을 생략 할 수 있습니다.

Point p = new (3, 5);

이것은 배열이나 객체 초기화에서 반복이 많은 경우 매우 좋습니다.

Point[] ps = { new (1, 2), new (5, 2), new (5, -3), new (1, -3) }; 

Covariant returns

파생 클래스의 메서드 재정의에 기본 형식의 선언 보다 더 구체적인 반환 형식이 있음을 나타내는 것이 유용할 때가 있습니다. C# 9.0에서는 다음이 가능합니다.

abstract class Animal
{
    public abstract Food GetFood();
    ...
}
class Tiger : Animal
{
    public override Meat GetFood() => ...;
}

And much more…

C# 9.0 기능의 전체 세트를 확인하기 위해 가장 좋은 곳은 "C# 9.0의 새로운 기능" 문서 페이지 입니다.

 

'Visual Studio' 카테고리의 다른 글

What's New in Visual Studio 2019 version 16.8  (0) 2020.11.26
Welcome to C# 9.0  (0) 2020.11.24
Announcing .NET 5.0 RC1  (0) 2020.10.08
What's new in ML.NET  (0) 2020.06.17
Modernizing .NET Desktop Applications with .NET Core  (0) 2019.10.07
What's New In C# 8.0 Part 2  (0) 2019.09.30
블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

Micorosft .NET 5 RC1 버전이 발표되었습니다. 이제 .Net Framework와 .Net Core의 통합이 눈앞에 온 것 같습니다. 이 새로운 .NET 5 버전은 2020년 11월 10일 정식 출시 예정입니다.

 

.NET 5의 목표는 모든 .NET 5 애플리케이션에서 단일 BCL(Base Class Library)를 사용하고, 여러 플랫폼에서 네이티브 및 웹 애플리케이션을 지원하는 통합 .NET SDK 환경을 제공하는 것입니다. 그래서, 단인 .NET 5 애플리케이션 프로젝트를 생성하고 Windows, Microsoft Duo(Android) 및 Apple iOS와 같은 플랫폼을 지원할 것입니다.

 

 

Reference

Announcing .NET 5.0 Preview 8 | .NET Blog (microsoft.com)

Announcing .NET 5.0 RC 1 | .NET Blog (microsoft.com)

What’s new in Microsoft .NET 5 | InfoWorld

 

Download

Download .NET 5.0 (Linux, macOS, and Windows) (microsoft.com)

  • Full version
    • 5.0.100-rc.1.20452.10
  • Visual Studio support
    • Visual Studio 2019 (v16.8, Preview 3)
    • 비주얼 스튜디오 Preview에서 테스트를 하기위한 최소 버전입니다.
  • Included runtimes
    • .NET Runtime 5.0.0-rc.1.20451.14
    • ASP.NET Core Runtime 5.0.0-rc.1.20451.14
    • .NET Desktop Runtime 5.0.0-rc.1.20451.14
  • Language support
    • C# 9.0-preview
    • F# 5.0-preview
    • Visual Basic 15.5

 

Languages

  • C# 9.0
    • Top-level programs
      • 기존에 console 앱 생성 후에 있던 모든 코드가 필요없습니다. 아래 코드를 삭제하고
      • namespace ConsoleApp1
        {
            class Program
            {
                static void Main(string[] args)
                {
                    Console.WriteLine("Hello World!");
                }
            }
        }
      • 간단하게!!
      • Console.WriteLine("Hello World!");
      • 최종적으로 이런 코딩이 가능합니다. 
      • using System;
        using System.Runtime.InteropServices;
        
        Console.WriteLine("Hello World!");
        FromWhom();
        Show.Excitement("Top-level programs can be brief, and can grow as slowly or quickly in complexity as you'd like", 8);
        
        void FromWhom()
        {
            Console.WriteLine($"From {RuntimeInformation.FrameworkDescription}");
        }
        
        internal class Show
        {
            internal static void Excitement(string message, int levelOf)
            {
                Console.Write(message);
        
                for (int i = 0; i < levelOf; i++)
                {
                    Console.Write("!");
                }
        
                Console.WriteLine();
            }
        }
    • Pattern matching
      • 값이 특정 모양을 가지고 있는지 테스트하고 일치하는 모양이있을 때 값에서 정보를 추출하는 기능입니다.
      • if (context is {IsReachable: true, Length: > 1 })
        {
            Console.WriteLine(context.Name);
        }
    • Target-typed new expressions
      • 객체/값을 생성할 때 유형 중복을 제거하도록 개선되었습니다.
      • List<string> values = new List<string>();
        List<string> values = new();
        var values = new List<string>();
  • F# 5.0
    • Interpolated Strings
    • Open Type Declarations

Tools

  • Microsoft.Extensions.Logging
    • Implement a custom ConsoleFormatter
    • 콘솔 프로바이더를 개선해서 사용자가 지정한 포멧으로 콘솔 출력의 서식 및 색상을 지정할 수 있습니다.
  • Dump debugging
    • Compile the Linux DAC
    • 리눅스 DAC를 컴파일할수 있어서 DAC에 대한 디버깅이 가능합니다.
  • Assembly load diagnostics added to event pipe
    • 이벤트 파이프에 어셈블리 로드 정보를 추가했습니다.
  • Printing environment information
    • .NET의 환경 정보를 쉽게 출력할 수 있도록 Tool을 추가했습니다. 
    • dotnet tool install –g dotnet-runtimeinfo
    • dotnet-runtimeinfo

Library APIs

  • Nullable Annotations
    • The platform is now 80% annotated for nullability
    • null 허용 여부에 대한 주석을 전체 80% 정도 추가했으며, 정식버전 출시전까지 나머지도 추가할 예정입니다.
  • Regular expression performance improvements
    • 정규식 엔진의 성능을 개선했습니다.
  • .NET 5.0 Target Framework
    • net5.0 is the new Target Framework Moniker (TFM) for .NET 5.0.
    • 타겟 플렛폼으로 .NET 5를 사용할 수 있습니다.
    • net5.0 combines and replaces netcoreapp and netstandard TFMs.
    • core와 netstandard를 통합하고 대체합니다.
    • net5.0 supports .NET Framework compatibility mode
    • .NET Framework 호환모드를 지원합니다.
    • net5.0-windows will be used to expose Windows-specific functionality, like Windows Forms and WPF.
    • net5.0-windows는 윈폼 및 WPF에서 윈도우 기능을 이용하기 위해 사용됩니다.
    • NET 6.0 will use the same approach, with net6.0 and will add net6.0-ios and net6.0-android. 
    • The OS-specific TFMs can include OS version numbers, like net6.0-ios14.
    • OS별 타겟 플렛폼은 OS 버전 번호가 포함될 수 있습니다.
    • Portable APIs, like ASP.NET Core and Xamarin.Forms, will be usable with net5.0.
    • 포터블 API들은 net5.0에서 사용할 수 있습니다.
  • WinRT Interop(Breaking Change)
    • New model for supporting WinRT APIs as part of .NET 5.0
    • WinRT API를 새로운 모델로 만들어서 .NET 5.0에 포함시겼습니다.
    • It can be developed and improved separate from the .NET runtime.
    • .NET 런타임과 별도로 개발 및 개선이 가능합니다.
    • Symmetrical with interop systems provided for other OSes, like iOS and Android.
    • iOS 및 Android와 같은 다른 OS에 제공되는 interop 시스템과 대칭이 되도록 구성했습니다.
    • Can take advantage of many other .NET features (AOT, C# features, IL linking).
    • 다른 많은 .NET 기능을 활용할 수 있습니다.
    • Simplifies the .NET runtime codebase.

Runtime Technology

  • Windows ARM64
    • Support for Windows ARM64 as part of this release
    • Windows ARM64에 대한 지원을 추가했습니다.
    • Decision to delay the Windows Desktop component(Windows Forms, WPF)
    • 하지만, 윈폼과 WPF 등의 윈도우 데스크탑 컴포넌트에 대한 지원은 지연되었습니다.
  • Event pipe profiler APIs
    • 프로파일러가 이벤트 파이프 이벤트를 작성할 수 있도록 확장되었습니다.
  • Native exports
    • Export managed methods to native code
    • 관리되는 메서드를 네이티브 코드로 내보낼 수 있습니다.
    • Unmanaged Exports
    • DllExport

Application deployment

  • Single file applications
    • Published and deployed as a single file
    • 단일 파일로 게시 및 배포를 할 수 잇습니다.
    • The app and its dependencies are all included within that file
    • 앱과 종속성 파일들을 모두 포함 합니다.
    • Single file apps are primarily focused on Linux
    • 다일 파일 앱은 주로 리눅스 배포에 중점을 두고 있습니다.
    • Framework-dependent single-file app:
      • dotnet publish -r linux-x64 --self-contained false /p:PublishSingleFile=true
    • Self-contained single-file app with assembly trimming and ready to run enabled:
      • dotnet publish -r linux-x64 --self-contained true /p:PublishSingleFile=true /p:PublishTrimmed=true /p:PublishReadyToRun=true
  • Reducing the size of container images
    • .NET 컨테이너 이미지의 크기를 줄였습니다.
  • ClickOnce Support
    • Deliver it as part of RC2
    • 닷넷 코어에서 클릭원스를 지원하기 위한 개발을 진행 중에 있습니다.

더 자세한 사항은 러퍼런스를 클릭해서 확인하시면 될 것 같습니다.

'Visual Studio' 카테고리의 다른 글

What's New in Visual Studio 2019 version 16.8  (0) 2020.11.26
Welcome to C# 9.0  (0) 2020.11.24
Announcing .NET 5.0 RC1  (0) 2020.10.08
What's new in ML.NET  (0) 2020.06.17
Modernizing .NET Desktop Applications with .NET Core  (0) 2019.10.07
What's New In C# 8.0 Part 2  (0) 2019.09.30
블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

Tag net5.0

댓글을 달아 주세요

What's new in ML.NET

Visual Studio 2020. 6. 17. 19:58

//Build2019에서 발표된 세션을 기준으로 작업했습니다.

  1. ML.NET introduction session
    Introducing ML.NET : https://aka.ms/mlnetbuild2019

  2. What is ML.NET

  • ML
  • ML.NET
  1. ML.NET runs anywhere

  2. A few things you can do with ML.NET

  3. ML.NET Model Builder

  4. DEMO

  5. ML.NET CLI

  6. Database Loader

  7. What if I want to classify based on my own custom domain?

  8. 동영상

    1. youtu.be/52bHpUGdeCs

 

 

'Visual Studio' 카테고리의 다른 글

Welcome to C# 9.0  (0) 2020.11.24
Announcing .NET 5.0 RC1  (0) 2020.10.08
What's new in ML.NET  (0) 2020.06.17
Modernizing .NET Desktop Applications with .NET Core  (0) 2019.10.07
What's New In C# 8.0 Part 2  (0) 2019.09.30
What's New in C# 8.0 Part 1  (0) 2019.09.29
블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

 

안녕하세요 Future Of DotNet입니다.

 

dotNet Conf에서 발표한 세션을 정리해 보았습니다.

 

1. Upgrades for Windows desktop development

 

2. Agenda

- Why should you care about .NET Core for desktop

- .NET Core or .NET Framework for my app

- Porting to .NET Core

- Fixing porting issues

- Tolling for desktop on .NET Core

-- Winforms designer Preview 1

 

3. Why .NET Core for desktop

 

4. How to choose : .NET Framework or .NET Core?

 

5. How compatible is my app with .NET Core?

 

6. Porting

 

7. Porting by hand

 

8. Porting with Try Convert

 

9. Windows Compatibility Pack

 

10. WinForms Designer Preview 1

 

https://youtu.be/yjumXnxA3tE

 

'Visual Studio' 카테고리의 다른 글

Announcing .NET 5.0 RC1  (0) 2020.10.08
What's new in ML.NET  (0) 2020.06.17
Modernizing .NET Desktop Applications with .NET Core  (0) 2019.10.07
What's New In C# 8.0 Part 2  (0) 2019.09.30
What's New in C# 8.0 Part 1  (0) 2019.09.29
.NET Conf 2019 Keynote 정리  (0) 2019.09.26
블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

안녕하세요. Future Of DotNet입니다.


닷넷 컨퍼런스 2019에서 발표된 C# 8.0에 대한 두번째 세션을 정리해 보았습니다.

Support modern cloud scenarios
- Async enumerables
- More patterns in more places
- Default interface members
- Indices and Ranges

Increase your productivity
- Using statement
- Static local functions
- Readonly members
- Null coalescing assignment
- Unmanaged constraint
- Interpolated verbatim string


감사합니다.

PS. 요즘 서피스에서 녹화해서 바로 올리기 때문에 해상도가 꽉 차지 안는 것 같습니다. 양해 부탁드립니다.

 

https://youtu.be/JO3DVp6Ahkc

 

'Visual Studio' 카테고리의 다른 글

What's new in ML.NET  (0) 2020.06.17
Modernizing .NET Desktop Applications with .NET Core  (0) 2019.10.07
What's New In C# 8.0 Part 2  (0) 2019.09.30
What's New in C# 8.0 Part 1  (0) 2019.09.29
.NET Conf 2019 Keynote 정리  (0) 2019.09.26
Offline Visual Studio 2019 perfect installation  (0) 2019.09.08
블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

안녕하세요. Future Of DotNet입니다.

 

닷넷 컨퍼런스 2019에서 발표된 C# 8.0에 대한 첫번째 세션을 정리해 보았습니다.

이 세션은 앞으로 다가올 닷넷 5 환경에서 사용될 예정인 Nullable - enable에 대해서 중점적으로 다루고 있습니다.

 

감사합니다.

 

PS. 요즘 서피스에서 녹화해서 바로 올리기 때문에 해상도가 꽉 차지 안는 것 같습니다. 양해 부탁드립니다.

 

https://youtu.be/grutIfb2FKA

 

원본 세션 주소
https://youtu.be/TJiLhRPgyq4

블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

안녕하세요 Future Of DotNet입니다.

 

2019년 9월 23-25일까지 Microsoft .NET Conf 2019가 열리고 있습니다.

키노트가 공개되어서 간단하게 정리를 해보았습니다.

앞으로 닷넷이 어떻게 변하게될지..무섭습니다.

 

프로젝트 진행 중이라 자주 글을 쓰지 못해서 송구합니다.

이번 컨퍼런스 중에 제가 관심있는 내용들에 대해서는 간단하게라도 정리를 해서 빨리 올리도록 하겠습니다.

감사합니다.

 

https://youtu.be/abfwVP1nwyM

 

블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

Visual Studio 2019 오프라인에서 완벽하게 설치하기

현재 비주얼 스튜디오는 ISO파일을 제공하지 않기 때문에 오프라인 PC에서 설치하는데 매우 어려움이 있습니다. 그래서, 오프라인에서 완벽하게 비주얼스튜디오를 설치하고 사용하는 방법에 대해서 다루어 보았습니다.

 

https://youtu.be/5ZBqR68IKYk

 

블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요

2019-07-24일자로 버전 업데이트가 되었습니다.

 

기본적인 내용은 아래서 확인하세요

https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes

 

Visual Studio 2019 Release Notes

Get the latest pre-release features, bug fixes, and support for Visual Studio 2019. Available for pre-release testing. Download today.

docs.microsoft.com

이번 업데이트에서 눈에 띠는 내용은 Visual Studio 2019에서 Microsoft Edge Insider 브라우저를 지원한다는 것과 이 브라우저를 이용하면 Visual Studio에서 JavaScript를 디버깅 할 수 있다는 내용입니다.

 

https://www.microsoftedgeinsider.com/en-us/download

 

Microsoft Edge Insider Channels

Updated every 6 weeks The Beta channel will be the most stable Microsoft Edge preview experience. It will be here soon, after we've had a chance to learn and improve in our other channels. Coming soon for Windows 10

www.microsoftedgeinsider.com

번역

이제 Visual Studio에서는 ASP.NET 및 ASP.NET 핵심 프로젝트를위한 새로운 Microsoft Edge Insider 브라우저에서 JavaScript 디버깅을 사용할 수 있습니다.

 

브라우저를 설치하고 응용 프로그램 JavaScript에 중단 점을 설정하고 Edge Insider 브라우저를 사용하여 디버그 세션을 시작하십시오. Visual Studio는 디버깅이 가능한 새 브라우저 창을 시작하여 개발자가 Visual Studio 내에서 응용 프로그램 JavaScript를 단계별로 실행할 수 있도록합니다.

 

또한 Visual Studio는 사용자 지정 CLI 매개 변수 (예 : --- inprivate)로 브라우저를 시작하기 위해 "찾아보기"옵션을 사용하여 사용자 지정 브라우저 구성 디버깅을 지원합니다.

 

JavaScript 디버깅을 위해 크롬의 디버그 기능을 이용하셨던 분들이라면 좋아할만한 내용인 것 같습니다.

 

블로그 이미지

kaki104

This blog covers the latest technologies in Microsoft .Net. In 2020, I will be talking about Uno Platform frequently. http://youtube.com/FutureOfDotNet https://twitter.com/kaki104

댓글을 달아 주세요