From c7df0e3a90258387182216c3237ad05b79da30a7 Mon Sep 17 00:00:00 2001 From: Mark J Price Date: Wed, 9 Feb 2022 10:30:33 +0000 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 50 +- book-links.md | 918 ++ errata.md | 12 + images/Categories-small/categories-small.jpeg | Bin 0 -> 1850430 bytes images/Categories-small/category1-small.jpeg | Bin 0 -> 158490 bytes images/Categories-small/category2-small.jpeg | Bin 0 -> 150726 bytes images/Categories-small/category3-small.jpeg | Bin 0 -> 134324 bytes images/Categories-small/category4-small.jpeg | Bin 0 -> 174691 bytes images/Categories-small/category5-small.jpeg | Bin 0 -> 192858 bytes images/Categories-small/category6-small.jpeg | Bin 0 -> 194373 bytes images/Categories-small/category7-small.jpeg | Bin 0 -> 239810 bytes images/Categories-small/category8-small.jpeg | Bin 0 -> 181300 bytes images/Categories/categories.jpeg | Bin 0 -> 1850430 bytes images/Categories/category1.jpeg | Bin 0 -> 1675696 bytes images/Categories/category2.jpeg | Bin 0 -> 1190788 bytes images/Categories/category3.jpeg | Bin 0 -> 1520763 bytes images/Categories/category4.jpeg | Bin 0 -> 1691680 bytes images/Categories/category5.jpeg | Bin 0 -> 1777905 bytes images/Categories/category6.jpeg | Bin 0 -> 1942233 bytes images/Categories/category7.jpeg | Bin 0 -> 2082204 bytes images/Categories/category8.jpeg | Bin 0 -> 1670600 bytes images/csdotnet-7e.png | Bin 0 -> 133313 bytes notebooks/Chapter01.dib | 20 + notebooks/Chapter02.dib | 473 + notebooks/Chapter03.dib | 582 ++ notebooks/Chapter04.dib | 245 + notebooks/Chapter05.dib | 655 ++ notebooks/Chapter06.dib | 860 ++ notebooks/Chapter07.dib | 80 + notebooks/Chapter08.dib | 878 ++ notebooks/Chapter09.dib | 675 ++ notebooks/Chapter10.dib | 159 + notebooks/Chapter11.dib | 206 + notebooks/Northwind.db | Bin 0 -> 565248 bytes notebooks/Northwind4SQLite.sql | 8722 +++++++++++++++++ notebooks/images/categories-thumbnail.jpeg | Bin 0 -> 32525 bytes notebooks/images/categories.jpeg | Bin 0 -> 1850430 bytes notebooks/images/category1-thumbnail.jpeg | Bin 0 -> 27878 bytes notebooks/images/category1.jpeg | Bin 0 -> 1675696 bytes notebooks/images/category2-thumbnail.jpeg | Bin 0 -> 29106 bytes notebooks/images/category2.jpeg | Bin 0 -> 1190788 bytes notebooks/images/category3-thumbnail.jpeg | Bin 0 -> 23967 bytes notebooks/images/category3.jpeg | Bin 0 -> 1520763 bytes notebooks/images/category4-thumbnail.jpeg | Bin 0 -> 28037 bytes notebooks/images/category4.jpeg | Bin 0 -> 1691680 bytes notebooks/images/category5-thumbnail.jpeg | Bin 0 -> 29989 bytes notebooks/images/category5.jpeg | Bin 0 -> 1777905 bytes notebooks/images/category6-thumbnail.jpeg | Bin 0 -> 30891 bytes notebooks/images/category6.jpeg | Bin 0 -> 1942233 bytes notebooks/images/category7-thumbnail.jpeg | Bin 0 -> 34603 bytes notebooks/images/category7.jpeg | Bin 0 -> 2082204 bytes notebooks/images/category8-thumbnail.jpeg | Bin 0 -> 26519 bytes notebooks/images/category8.jpeg | Bin 0 -> 1670600 bytes sql-scripts/Northwind4SQLServer.sql | Bin 0 -> 2115016 bytes sql-scripts/Northwind4SQLite.sql | 8722 +++++++++++++++++ 56 files changed, 23256 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 book-links.md create mode 100644 errata.md create mode 100644 images/Categories-small/categories-small.jpeg create mode 100644 images/Categories-small/category1-small.jpeg create mode 100644 images/Categories-small/category2-small.jpeg create mode 100644 images/Categories-small/category3-small.jpeg create mode 100644 images/Categories-small/category4-small.jpeg create mode 100644 images/Categories-small/category5-small.jpeg create mode 100644 images/Categories-small/category6-small.jpeg create mode 100644 images/Categories-small/category7-small.jpeg create mode 100644 images/Categories-small/category8-small.jpeg create mode 100644 images/Categories/categories.jpeg create mode 100644 images/Categories/category1.jpeg create mode 100644 images/Categories/category2.jpeg create mode 100644 images/Categories/category3.jpeg create mode 100644 images/Categories/category4.jpeg create mode 100644 images/Categories/category5.jpeg create mode 100644 images/Categories/category6.jpeg create mode 100644 images/Categories/category7.jpeg create mode 100644 images/Categories/category8.jpeg create mode 100644 images/csdotnet-7e.png create mode 100644 notebooks/Chapter01.dib create mode 100644 notebooks/Chapter02.dib create mode 100644 notebooks/Chapter03.dib create mode 100644 notebooks/Chapter04.dib create mode 100644 notebooks/Chapter05.dib create mode 100644 notebooks/Chapter06.dib create mode 100644 notebooks/Chapter07.dib create mode 100644 notebooks/Chapter08.dib create mode 100644 notebooks/Chapter09.dib create mode 100644 notebooks/Chapter10.dib create mode 100644 notebooks/Chapter11.dib create mode 100644 notebooks/Northwind.db create mode 100644 notebooks/Northwind4SQLite.sql create mode 100644 notebooks/images/categories-thumbnail.jpeg create mode 100644 notebooks/images/categories.jpeg create mode 100644 notebooks/images/category1-thumbnail.jpeg create mode 100644 notebooks/images/category1.jpeg create mode 100644 notebooks/images/category2-thumbnail.jpeg create mode 100644 notebooks/images/category2.jpeg create mode 100644 notebooks/images/category3-thumbnail.jpeg create mode 100644 notebooks/images/category3.jpeg create mode 100644 notebooks/images/category4-thumbnail.jpeg create mode 100644 notebooks/images/category4.jpeg create mode 100644 notebooks/images/category5-thumbnail.jpeg create mode 100644 notebooks/images/category5.jpeg create mode 100644 notebooks/images/category6-thumbnail.jpeg create mode 100644 notebooks/images/category6.jpeg create mode 100644 notebooks/images/category7-thumbnail.jpeg create mode 100644 notebooks/images/category7.jpeg create mode 100644 notebooks/images/category8-thumbnail.jpeg create mode 100644 notebooks/images/category8.jpeg create mode 100644 sql-scripts/Northwind4SQLServer.sql create mode 100644 sql-scripts/Northwind4SQLite.sql diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e43b0f98 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/README.md b/README.md index 38a364c9..4b126c27 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,48 @@ -# cs11dotnet7 -Repository for the Packt Publishing book titled "C# 11 and .NET 7 - Modern Cross-Platform Development" by Mark J. Price +[![Open in Visual Studio Code](https://open.vscode.dev/badges/open-in-vscode.svg)](https://open.vscode.dev/markjprice/cs11dotnet7) + +[Improvements & Errata - list of corrections](errata.md) + +# C# 11 and .NET 7 - Modern Cross-Platform Development, Seventh Edition + +The previous edition was published on Tuesday, November 9, 2021. Order today from [Packt](https://www.packtpub.com/product/c-10-and-net-6-modern-cross-platform-development-sixth-edition/9781801077361), [Amazon.com](https://www.amazon.com/10-NET-Cross-Platform-Development-websites-dp-1801077363/dp/1801077363/), [Amazon.co.uk](https://www.amazon.co.uk/10-NET-Cross-Platform-Development-websites-dp-1801077363/dp/1801077363/), [Amazon.com.au](https://www.amazon.com.au/10-NET-Cross-Platform-Development-websites-ebook/dp/B09JV37DM6/), and all good book stores. My author page on Amazon: https://www.amazon.com/Mark-J-Price/e/B071DW3QGN/ + +## Code solutions for Visual Studio 2022 and Visual Studio Code + +If you have Visual Studio 2022 for Windows and Visual Studio Code and its C# extension installed on the same computer, the build process can sometimes conflict. This is because Visual Studio has its own non-standard build server that is different from the standard build server used by .NET SDK. Visual Studio 2022 and Visual Studio Code also use different file types to group projects. So I have duplicated and separated solution code for each product: + +- [/vs4win](/vs4win): Visual Studio 2022 for Windows solution files and projects for each chapter +- [/vscode](/vscode): Visual Studio Code workspace files and projects for each chapter + +## Bonus content +The appendix is available to download as a PDF: +- Appendix A, Answers to the Test Your Knowledge Questions (coming November 2022) + +Supplementary print book materials available to download: +- Color images of the screenshots/diagrams used in this book (coming November 2022) + +## Important +Corrections for typos and other mistakes and improvements like refactoring code. Useful links to other related material. +- [Book Links](book-links.md) +- [Improvements & Errata - list of corrections](errata.md) + +## Microsoft .NET community support +- .NET Developer Community: https://dotnet.microsoft.com/platform/community +- .NET Tech Community Forums for topic discussions: https://techcommunity.microsoft.com/t5/net/ct-p/dotnet +- Q&A for .NET to get your questions answered: https://docs.microsoft.com/en-us/answers/products/dotnet +- Technical questions about the C# programming language: https://docs.microsoft.com/en-us/answers/topics/dotnet-csharp.html +- If you'd like to apply to be a reviewer: https://authors.packtpub.com/reviewers/ + +## Interviews with me +Podcast interviews with me: +- [The .NET Core Podcast - February 4, 2022](https://dotnetcore.show/episode-91-c-sharp-10-and-dotnet-6-with-mark-j-price/) +- [The .NET Core Podcast - February 7, 2020](https://dotnetcore.show/episode-44-learning-net-core-with-mark-j-price/) +- [Yet Another Podcast with Jesse Liberty - May 2021](http://jesseliberty.com/2021/05/16/mark-price-on-c9-and-net-6/) +- [Yet Another Podcast with Jesse Liberty - February 2020](http://jesseliberty.com/2020/02/23/mark-price-c-net-core/) +- [Packt Podcasts](https://soundcloud.com/packt-podcasts/csharp-8-dotnet-core-3-the-evolution-of-the-microsoft-ecosystem) + +Written interviews with me: +- [C# 9 and .NET 5: Book Review and Q&A](https://www.infoq.com/articles/book-interview-mark-price/?itm_source=infoq&itm_campaign=user_page&itm_medium=link) +- [Q&A with Episerver's Mark J. Price, author of C# 9 and .NET 5 - Modern Cross-Platform Development](https://www.episerver.com/articles/q-and-a-with-mark-price) + +## Book cover +![C# 11 and .NET 7 by Packt Publishing](images/csdotnet-7e.png) diff --git a/book-links.md b/book-links.md new file mode 100644 index 00000000..a072fd6a --- /dev/null +++ b/book-links.md @@ -0,0 +1,918 @@ +- [Chapter 1 - Hello, C#! Welcome, .NET!](#chapter-1---hello-c-welcome-net) + - [Visual Studio 2022 for Windows](#visual-studio-2022-for-windows) + - [Visual Studio Code](#visual-studio-code) + - [Other C# code editors and platforms](#other-c-code-editors-and-platforms) + - [.NET Interactive](#net-interactive) + - [Command Line Interfaces](#command-line-interfaces) + - [.NET](#net) + - [Open source and other projects related to .NET](#open-source-and-other-projects-related-to-net) + - [Git](#git) + - [Help and learning](#help-and-learning) +- [Chapter 2 - Speaking C](#chapter-2---speaking-c) + - [C# language version and the journey to C# 10](#c-language-version-and-the-journey-to-c-10) + - [C# language](#c-language) + - [C# implemented proposals](#c-implemented-proposals) + - [C# proposals being worked on](#c-proposals-being-worked-on) + - [Text types](#text-types) + - [Number types](#number-types) + - [Console apps and formatting](#console-apps-and-formatting) + - [Miscellaneous](#miscellaneous) +- [Chapter 3 - Controlling Flow and Converting Types](#chapter-3---controlling-flow-and-converting-types) + - [Operators](#operators) + - [Branching statements and pattern matching](#branching-statements-and-pattern-matching) + - [Casting, converting, rounding, and formatting data](#casting-converting-rounding-and-formatting-data) + - [Handling exceptions](#handling-exceptions) + - [Coding problems in interviews](#coding-problems-in-interviews) +- [Chapter 4 - Writing, Debugging, and Testing Functions](#chapter-4---writing-debugging-and-testing-functions) + - [Concepts](#concepts) + - [Debugging](#debugging) + - [Instrumenting](#instrumenting) + - [Testing](#testing) +- [Chapter 5 - Building Your Own Types with Object-Oriented Programming](#chapter-5---building-your-own-types-with-object-oriented-programming) + - [Fields](#fields) + - [Methods](#methods) + - [Properties](#properties) + - [Pattern matching](#pattern-matching) + - [Records](#records) + - [Miscellaneous](#miscellaneous-1) +- [Chapter 6 - Implementing Interfaces and Inheriting Classes](#chapter-6---implementing-interfaces-and-inheriting-classes) + - [Operator overloading](#operator-overloading) + - [Delegates and events](#delegates-and-events) + - [Interfaces and generics](#interfaces-and-generics) + - [Memory, reference and value types](#memory-reference-and-value-types) + - [Null and nullability](#null-and-nullability) + - [Inheritance](#inheritance) +- [Chapter 7 - Packaging and Distributing .NET Types](#chapter-7---packaging-and-distributing-net-types) + - [.NET Standard](#net-standard) + - [.NET versions](#net-versions) + - [.NET API, packages and frameworks](#net-api-packages-and-frameworks) + - [Roslyn, SDKs, and project templates](#roslyn-sdks-and-project-templates) + - [Packaging and publishing](#packaging-and-publishing) + - [Decompiling .NET](#decompiling-net) + - [Porting from .NET Framework to modern .NET](#porting-from-net-framework-to-modern-net) + - [Preview features](#preview-features) +- [Chapter 8 - Working with Common .NET Types](#chapter-8---working-with-common-net-types) + - [Working with numbers](#working-with-numbers) + - [Working with text and regular expressions](#working-with-text-and-regular-expressions) + - [Dates and times](#dates-and-times) + - [Collections](#collections) + - [Spans](#spans) + - [Networking](#networking) + - [Assemblies and reflection](#assemblies-and-reflection) + - [Working with images](#working-with-images) + - [Internationalization](#internationalization) +- [Chapter 9 - Working with Files, Streams, and Serialization](#chapter-9---working-with-files-streams-and-serialization) + - [File system, encoding, and streams](#file-system-encoding-and-streams) + - [Serialization](#serialization) + - [JSON](#json) +- [Chapter 10 - Working with Data Using Entity Framework Core](#chapter-10---working-with-data-using-entity-framework-core) + - [Legacy EF 6](#legacy-ef-6) + - [EF Core](#ef-core) + - [EF Core database providers](#ef-core-database-providers) + - [SQLite](#sqlite) + - [Microsoft SQL Server](#microsoft-sql-server) + - [NoSQL data stores](#nosql-data-stores) + - [EF Core models](#ef-core-models) + - [EF Core querying and manipulating](#ef-core-querying-and-manipulating) +- [Chapter 11 - Querying and Manipulating Data Using LINQ](#chapter-11---querying-and-manipulating-data-using-linq) + - [LINQ concepts](#linq-concepts) + - [LINQ providers](#linq-providers) + - [LINQ samples and tools](#linq-samples-and-tools) +- [Chapter 12 - Improving Performance and Scalability Using Multitasking](#chapter-12---improving-performance-and-scalability-using-multitasking) + - [Threads](#threads) + - [Tasks](#tasks) + - [Thread safety](#thread-safety) + - [async and await](#async-and-await) + - [Parallel programming](#parallel-programming) + - [Sharing resouces and synchronization](#sharing-resouces-and-synchronization) +- [Chapter 13 - Introducing Practical Applications of C# and .NET](#chapter-13---introducing-practical-applications-of-c-and-net) + - [.NET apps](#net-apps) + - [.NET Content Management Systems](#net-content-management-systems) + - [ASP.NET versions and features](#aspnet-versions-and-features) + - [Web development technologies](#web-development-technologies) + - [Windows desktop app development](#windows-desktop-app-development) + - [Third-party cross-platform GUI development](#third-party-cross-platform-gui-development) +- [Chapter 14 - Building Websites Using ASP.NET Core Razor Pages](#chapter-14---building-websites-using-aspnet-core-razor-pages) + - [General web development](#general-web-development) + - [ASP.NET Core](#aspnet-core) + - [Razor Pages and layouts](#razor-pages-and-layouts) + - [Endpoint routing](#endpoint-routing) +- [Chapter 15 - Building Websites Using the Model-View-Controller Pattern](#chapter-15---building-websites-using-the-model-view-controller-pattern) + - [Security and privacy](#security-and-privacy) + - [Setting up and configuring](#setting-up-and-configuring) + - [Controllers](#controllers) + - [Models](#models) + - [Views](#views) + - [Miscellaneous](#miscellaneous-2) +- [Chapter 16 - Building and Consuming Web Services](#chapter-16---building-and-consuming-web-services) + - [Web service technologies](#web-service-technologies) + - [Web service routing](#web-service-routing) + - [Web service clients](#web-service-clients) + - [Documenting web services](#documenting-web-services) + - [Securing web services](#securing-web-services) + - [Health checks and reliable web services](#health-checks-and-reliable-web-services) +- [Chapter 17 - Building User Interfaces Using Blazor](#chapter-17---building-user-interfaces-using-blazor) + - [Blazor hosting models](#blazor-hosting-models) + - [Blazor components](#blazor-components) + - [Advanced techniques](#advanced-techniques) + - [Other resources](#other-resources) +- [Chapter 18 - Building and Consuming Other Services](#chapter-18---building-and-consuming-other-services) + - [WCF](#wcf) + - [gRPC](#grpc) + - [SignalR](#signalr) + - [OData](#odata) + - [Azure Functions](#azure-functions) +- [Chapter 19 - Building Mobile and Desktop Apps Using .NET MAUI](#chapter-19---building-mobile-and-desktop-apps-using-net-maui) + - [.NET MAUI](#net-maui) + - [Mobile development](#mobile-development) +- [Chapter 20 - Protecting Your Data and Applications](#chapter-20---protecting-your-data-and-applications) + - [Cross-platform cryptography](#cross-platform-cryptography) + - [General security knowledge](#general-security-knowledge) + - [Encryption](#encryption) +- [Epilogue](#epilogue) + - [Next steps on your C# and .NET learning journey](#next-steps-on-your-c-and-net-learning-journey) + - [Learn from other Packt books](#learn-from-other-packt-books) + +# Chapter 1 - Hello, C#! Welcome, .NET! + +## Visual Studio 2022 for Windows +- Download Visual Studio for Windows: https://visualstudio.microsoft.com/downloads/ +- Sign up for a Microsoft account: https://signup.live.com/ +- Visual Studio for Windows documentation: https://docs.microsoft.com/en-us/visualstudio/windows/ +- MSBuild and 64-bit Visual Studio 2022: https://devblogs.microsoft.com/dotnet/msbuild-and-64-bit-visual-studio-2022/ +- Create C# apps with Visual Studio: https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/ +- Tutorial: Open a project from a repo: https://docs.microsoft.com/en-us/visualstudio/get-started/tutorial-open-project-from-repo-visual-studio-2019 +- Comparison of Visual Studio Code and Visual Studio: https://www.itworld.com/article/3403683/visual-studio-code-stepping-on-visual-studios-toes.html + +## Visual Studio Code +- Download Visual Studio Code: https://code.visualstudio.com/ +- Set up Visual Studio Code: https://code.visualstudio.com/docs/setup/setup-overview +- Visual Studio Code key bindings and shortcuts: https://code.visualstudio.com/docs/getstarted/keybindings + - Windows: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf + - macOS: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf + - Linux: https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf +- Latest versions of Visual Studio Code: https://code.visualstudio.com/updates +- Visual Studio Code documentation: https://code.visualstudio.com/docs + - Visual Studio Code user interface: https://code.visualstudio.com/docs/getstarted/userinterface + - Visual Studio Code support for C#: https://code.visualstudio.com/docs/languages/csharp + - Source code version control with Visual Studio Code: https://code.visualstudio.com/Docs/editor/versioncontrol +- Microsoft's plans for Visual Studio Code: https://github.com/Microsoft/vscode/wiki/Roadmap +- Learning with VS Code on Chromebooks: https://code.visualstudio.com/blogs/2020/12/03/chromebook-get-started +- Google and Amazon are supporters of Visual Studio Code: https://www.cnbc.com/2018/12/20/microsoft-cmo-capossela-says-google-employees-use-visual-studio-code.html +- Visual Studio Code: How Microsoft's 'any OS, any programming language, any software' plan is paying off: https://www.zdnet.com/article/visual-studio-code- +how-microsofts-any-os-any-programming-language-any-software-plan-is-paying-off/ +- The History of Visual Studio Code: https://mybuild.microsoft.com/sessions/6b571733-8198-48da-b870-ef804dcfea93?source=sessions + +## Other C# code editors and platforms +- Stack Overflow survey 2021 - Integrated development environment: https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-integrated-development-environment +- Stack Overflow survey 2019 - Most Popular Development Environments: https://insights.stackoverflow.com/survey/2019#development-environments-and-tools +- Visual Studio for Mac documentation: https://docs.microsoft.com/en-us/visualstudio/mac/ +- GitHub Codespaces: https://docs.github.com/en/github/developing-online-with-codespaces/about-codespaces +- JetBrains Rider: https://www.jetbrains.com/rider/ +- Rider documentation: https://www.jetbrains.com/help/rider/Introduction.html +- How to code with C# and .NET using a Raspberry Pi 400 with Ubuntu Desktop 64-bit by reading an extra article that I wrote at the following link: https://github.com/markjprice/cs9dotnet5-extras/blob/main/raspberry-pi-ubuntu64/README.md + +## .NET Interactive +- .NET Interactive documentation: https://github.com/dotnet/interactive/tree/main/docs +- VS Code Notebooks: A Deep Dive video: https://www.youtube.com/watch?v=D-AXZZDTQhM +- Discuss: File format in the .NET Interactive VS Code extension: https://github.com/dotnet/interactive/issues/467 +- Polyglot Notebooks: Variable Sharing: https://devblogs.microsoft.com/dotnet/net-interactive-preview-3-vs-code-insiders-and-polyglot-notebooks/ +- Using HTML and JavaScript in .NET Interactive: https://github.com/dotnet/interactive/blob/main/docs/javascript-overview.md +- .NET Interactive Samples: https://github.com/dotnet/interactive/tree/main/samples +- Markdown syntax: https://daringfireball.net/projects/markdown/syntax + +## Command Line Interfaces +- Windows Terminal as your Default Command Line Experience: https://devblogs.microsoft.com/commandline/windows-terminal-as-your-default-command-line-experience/ +- .NET Core Command-Line Interface (CLI) tool: https://aka.ms/dotnet-cli-docs + +## .NET +- Download .NET SDK: https://www.microsoft.com/net/download +- Stack Overflow survey 2021 - Most loved frameworks and libraries: https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-other-frameworks-and-libraries +- Themes of .NET: https://themesof.net/ +- Microsoft's positioning of .NET Core and .NET Framework: https://devblogs.microsoft.com/dotnet/update-on-net-core-3-0-and-net-framework-4-8/ +- Microsoft's plans for the journey to one .NET: https://devblogs.microsoft.com/dotnet/announcing-net-5-preview-4-and-our-journey-to-one-net/ +- Official list of .NET 6 supported operating systems: https://github.com/dotnet/core/blob/master/release-notes/6.0/6.0-supported-os.md +- Windows ARM64 support: https://github.com/dotnet/runtime/issues/36699 +- .NET Support Policy: https://dotnet.microsoft.com/platform/support/policy/dotnet-core +- .NET versions: https://docs.microsoft.com/en-us/dotnet/core/versions/ +- .NET Uninstall Tool: https://docs.microsoft.com/en-us/dotnet/core/additional-tools/uninstall-tool +- Remove .NET SDKs and runtimes: https://docs.microsoft.com/en-us/dotnet/core/install/remove-runtime-sdk-versions +- ASP.NET Core and EF Core branding for .NET 5: https://docs.microsoft.com/en-us/dotnet/core/dotnet-five +- .NET Optional SDK Workloads: https://github.com/dotnet/designs/blob/main/accepted/2020/workloads/workloads.md +- .NET Core runtime, CoreCLR: https://github.com/dotnet/runtime +- .NET Core Roadmap: https://github.com/dotnet/core/blob/master/roadmap.md +- .NET Standard FAQ: https://github.com/dotnet/standard/blob/master/docs/faq.md +- .NET Standard versions and which .NET platforms support them: https://github.com/dotnet/standard/blob/master/docs/versions.md +- .NET Team Members: https://twitter.com/i/lists/120961876//members + +## Open source and other projects related to .NET +- Mono project: http://www.mono-project.com/ +- Unity project: https://docs.unity3d.com/ +- Open source projects to enable WCF and WF to migrate to .NET 5: https://devblogs.microsoft.com/dotnet/supporting-the-community-with-wf-and-wcf-oss-projects/ +- Open source project for Blazor Web Forms components: https://github.com/FritzAndFriends/BlazorWebFormsComponents + +## Git +- Download Git: https://git-scm.com/download +- Download GitHub Desktop: https://desktop.github.com +- Become a master at Git and Open Source: https://devblogs.microsoft.com/visualstudio/become-a-master-at-git-and-open-source/ + +## Help and learning +- Raise an issue with the book: https://github.com/markjprice/cs10dotnet6/issues +- .NET Conf 2021 Recap – Videos, Slides, Demos, and More: https://devblogs.microsoft.com/dotnet/net-conf-2021-recap-videos-slides-demos-and-more/ +- Microsoft Docs: https://docs.microsoft.com/ +- Official .NET Blog written by the .NET engineering teams: https://devblogs.microsoft.com/dotnet/ +- Scott Hanselman's videos: http://computerstufftheydidntteachyou.com/ +- Get better at programming by learning how things work: https://jvns.ca/blog/learn-how-things-work/ +- Practice .NET anywhere with .NET Fiddle: https://dotnetfiddle.net/ +- Try .NET: https://try.dot.net/ +- Stack Overflow: https://stackoverflow.com/ +- Google Advanced Search: https://www.google.com/advanced_search +- Microsoft Learn: https://docs.microsoft.com/en-us/learn/ +- .NET Videos: https://dotnet.microsoft.com/learn/videos +- Microsoft Channel 9 – .NET Videos: https://channel9.msdn.com/Search?term=.net&lang-en=true + +# Chapter 2 - Speaking C# + +## C# language version and the journey to C# 10 +- Welcome to C# 10: https://devblogs.microsoft.com/dotnet/welcome-to-csharp-10/ +- Announcing Open Source C# standardization: https://devblogs.microsoft.com/dotnet/announcing-open-source-c-standardization-standards/ +- Rosalyn and C# compiler versions: https://github.com/dotnet/roslyn/blob/master/docs/wiki/NuGet-packages.md +- How Microsoft rewrote its C# compiler in C# and made it open source: https://medium.com/microsoft-open-source-stories/how-microsoft-rewrote-its-c-compiler-in-c-and-made-it-open-source-4ebed5646f98 +- Current status of the C# language: https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md +- C# Language Specification 5.0: https://www.microsoft.com/en-us/download/details.aspx?id=7029 +- Draft proposals for C# Language Specifications for 6.0 and later: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/ +- What's new in C# 7.3: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-3 +- New C# 9.0 features: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9 +- C# 9 Workshop: https://github.com/dotnet-presentations/csharp-workshop +- C# language versioning: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version +- The history of C#: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history +- Interview with the C# Boss - Mads Torgersen: https://www.dotnetcurry.com/csharp/1455/mads-torgersen-interview +- The .NET Docs Show - C# Ask Me Anything 🤯: https://www.youtube.com/watch?v=U6cwOzUqjxY +- [EPIC] .NET 6 C# project templates use latest language idioms #3359: https://github.com/dotnet/templating/issues/3359 +- SDK support for implicit namespaces in C# projects #25066: https://github.com/dotnet/docs/issues/25066 + +## C# language +- C# Reference: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/ +- C# Programming Guide: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/ +- C# Keywords: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/index +- Naming guidelines: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-guidelines +- Types (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/ +- Statements, Expressions, and Operators (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/ + +## C# implemented proposals +- C# 10: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-10.0 +- C# 9: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-9.0 +- C# 8: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-8.0 +- C# 7.3: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-7.3 +- C# 7.2: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-7.2 +- C# 7.1: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-7.1 +- C# 7.0: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-7.0 +- C# 6.0: https://github.com/dotnet/csharplang/tree/main/proposals/csharp-6.0 + +## C# proposals being worked on +- [Proposal] Required Properties #3630: https://github.com/dotnet/csharplang/issues/3630 +- Champion: Simplified parameter null validation code #2145: https://github.com/dotnet/csharplang/issues/2145 +- Proposal: Semi-Auto-Properties; field keyword #140: https://github.com/dotnet/csharplang/issues/140 +- Working Set (of proposals): https://github.com/dotnet/csharplang/milestone/19 + +## Text types +- Strings (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/ +- Verbatim strings: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/verbatim +- String Interpolation in C# 10 and .NET 6: https://devblogs.microsoft.com/dotnet/string-interpolation-in-c-10-and-net-6/ +- Escape sequences: https://devblogs.microsoft.com/csharpfaq/what-character-escape-sequences-are-available/ + +## Number types +- Floating point numbers: https://ciechanow.ski/exposing-floating-point/ +- Why 0.1 does not exist in floating-point numbers: https://www.exploringbinary.com/why-0-point-1-does-not-exist-in-floating-point/ +- American Patriot missile disaster: https://www.ima.umn.edu/~arnold/disasters/patriot.html + +## Console apps and formatting +- Main() and command-line arguments (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/ +- Console Class: https://docs.microsoft.com/en-us/dotnet/api/system.console +- Formatting types: https://docs.microsoft.com/en-us/dotnet/standard/base-types/formatting-types +- Composite Formatting: https://docs.microsoft.com/en-us/dotnet/standard/base-types/composite-formatting + +## Miscellaneous +- An Arabic programming language: https://youtu.be/dkO8cdwf6v8 + +# Chapter 3 - Controlling Flow and Converting Types + +## Operators +- C# operators: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/operators +- Truth tables: https://en.wikipedia.org/wiki/Truth_table +- Side effects: https://en.wikipedia.org/wiki/Side_effect_(computer_science) +- Bitwise and shift operators: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/bitwise-and-shift-operators +- Member access operators: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators + +## Branching statements and pattern matching +- Statement keywords (C# Reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/statement-keywords +- Goto Fail bug: https://gotofail.com/ +- goto keyword and examples of when it can be used: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/goto +- Pattern matching: https://docs.microsoft.com/en-us/dotnet/csharp/pattern-matching +- Patterns and switch expressions: https://devblogs.microsoft.com/dotnet/do-more-with-patterns-in-c-8-0/ + +## Casting, converting, rounding, and formatting data +- Taking control of rounding: https://docs.microsoft.com/en-us/dotnet/api/system.math.round +- Format codes for common scenarios: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings +- Casting and type conversions (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/types/casting-and-type-conversions + +## Handling exceptions +- 10 Exception handling best practices in C#: https://kumarashwinhubert.com/10-exception-handling-best-practices-in-csharp + +## Coding problems in interviews +- Why can't programmers program? http://blog.codinghorror.com/why-cant-programmers-program/ +- FizzBuzz for programming interviews: http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/ +- Make Better Hiring Decisions With Take-Home Coding Challenges: https://codesubmit.io +- The 30-minute guide to rocking your next coding interview: https://www.freecodecamp.org/news/coding-interviews-for-dummies-5e048933b82b/ +- C# Interview Questions: https://www.codingdojo.com/blog/c-interview-questions + +# Chapter 4 - Writing, Debugging, and Testing Functions + +## Concepts +- Recursion versus interation: https://en.wikipedia.org/wiki/Recursion_(computer_science)#Recursion_versus_iteration + +## Debugging +- Visual Studio for Windows debugger documentation: https://docs.microsoft.com/en-us/visualstudio/debugger/ +- Visual Studio Code debugger: https://code.visualstudio.com/docs/editor/debugging +- Instructions for setting up the .NET debugger: https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger.md +- How to debug for absolute beginners: https://docs.microsoft.com/en-us/visualstudio/debugger/debugging-absolute-beginners + +## Instrumenting +- System.Diagnostics Namespace: https://docs.microsoft.com/en-us/dotnet/core/api/system.diagnostics +- Debug class: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debug +- Trace listeners: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.tracelistener +- Console log formatting: https://docs.microsoft.com/en-us/dotnet/core/extensions/console-log-formatter +- Using .env in .NET: https://dusted.codes/dotenv-in-dotnet +- Announcing dotnet monitor in .NET 6: https://devblogs.microsoft.com/dotnet/announcing-dotnet-monitor-in-net-6/ + +## Testing +- Test Driven Development (TDD): https://en.wikipedia.org/wiki/Test-driven_development +- Unit testing in .NET: https://docs.microsoft.com/en-us/dotnet/core/testing/ +- xUnit.net: http://xunit.github.io/ + +# Chapter 5 - Building Your Own Types with Object-Oriented Programming + +## Fields +- Fields (C# programming guide): https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/classes-and-structs/fields +- Access modifiers (C# programming guide): https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/keywords/access-modifiers +- Enumeration types (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/enum + +## Methods +- Constructors (C# programming guide): https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/classes-and-structs/constructors +- Methods (C# programming guide): https://docs.microsoft.com/en-us/dotnet/articles/csharp/methods +- Deconstruct method: https://docs.microsoft.com/en-us/dotnet/csharp/deconstruct +- params keyword: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/params +- ref keyword: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/ref-returns + +## Properties +- Encapsulation of fields using properties: https://stackoverflow.com/questions/1568091/why-use-getters-and-setters-accessors +- Properties (C# programming guide): https://docs.microsoft.com/en-us/dotnet/articles/csharp/properties +- Using Tuples in C# to Initialize Properties in the Constructor and to Deconstruct Your Object: https://www.thomasclaudiushuber.com/2021/03/25/csharp-using-tuples-to-initialize-properties/ + +## Pattern matching +- Pattern matching tutorial: https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/pattern-matching + +## Records +- Comparing struct and class records: https://devblogs.microsoft.com/dotnet/announcing-net-6-release-candidate-2/#record-structs + +## Miscellaneous +- How to calculate someone's age: https://stackoverflow.com/questions/9/how-do-i-calculate-someones-age-in-c + +# Chapter 6 - Implementing Interfaces and Inheriting Classes + +## Operator overloading +- Operator (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/operator-overloading +- Symbols that can be overloaded: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/overloadable-operators + +## Delegates and events +- Delegates: https://docs.microsoft.com/en-us/dotnet/standard/delegates-lambdas +- Events (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/event +- Custom EventArgs: https://docs.microsoft.com/en-us/dotnet/standard/events/how-to-raise-and-consume-events + +## Interfaces and generics +- Interfaces: https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/types/interfaces +- Explicit interface implementations: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interfaces/explicit-interface-implementation +- Design decisions for default interface implementations: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/default-interface-methods +- Default interface implementations tutorial: https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/default-interface-members-versions +- Generics (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics + +## Memory, reference and value types +- Reference Types (C# Reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types +- Value Types (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types +- Choosing Between Class and Struct: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct +- Conversation about the .NET type system: https://devblogs.microsoft.com/dotnet/conversation-about-the-net-type-system/ +- Technical details of the internal memory layout of types in .NET: https://adamsitnik.com/Value-Types-vs-Reference-Types/ +- Garbage collection: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/ +- Finalizers (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/destructors +- Finalizers and disposing: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/unmanaged +- IDisposable interface: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/using-objects + +## Null and nullability +- The inventor of null, Sir Charles Antony Richard Hoare, admits his mistake in a recorded hour-long talk: https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare +- The tweet about achieving 80% annotations in .NET 5: https://twitter.com/terrajobst/status/1296566363880742917 +- Video to learn how to get rid of null reference exceptions forever: https://channel9.msdn.com/Shows/On-NET/This-is-how-you-get-rid-of-null-reference-exceptions-forever +- Nullable value types (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nullable-value-types +- Nullable reference types: https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references +- Null-conditional operator: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators +- Null-coalescing operator: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator + +## Inheritance +- Inheritance (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/inheritance + +# Chapter 7 - Packaging and Distributing .NET Types + +## .NET Standard +- .NET Standard 2.1 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-standard-2-1/ +- .NET Standard 2.1 APIs and a comparison with .NET Standard 2.0: https://github.com/dotnet/standard/blob/master/docs/versions/netstandard2.1.md +- Future of .NET Standard: https://devblogs.microsoft.com/dotnet/the-future-of-net-standard/ +- From .NET Standard to .NET 5: https://www.codemag.com/article/2010022 + +## .NET versions +- .NET Core 1.0 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-core-1-0/ +- .NET Core 1.1 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-core-1-1/ +- .NET Core 2.0 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-core-2-0/ +- .NET Core 2.2 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-core-2-2/ +- .NET Core 3.0 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0/ +- .NET Core 3.1 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1/ +- .NET 5 announcement: https://devblogs.microsoft.com/dotnet/announcing-net-5-0 +- Performance improvements in .NET 5: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/ +- .NET 5.0 Runtime Highlights: https://codemag.com/Article/2010092/.NET-5.0-Runtime-Highlights +- Announcing .NET 6 — The Fastest .NET Yet: https://devblogs.microsoft.com/dotnet/announcing-net-6/ + +## .NET API, packages and frameworks +- Search and browse all .NET APIs: https://docs.microsoft.com/en-us/dotnet/api/ +- CoreFX README.md: https://github.com/dotnet/corefx/blob/master/Documentation/README.md +- .NET 6.0 TFMs: https://github.com/dotnet/designs/pull/174/files +- How packages and their APIs relate to frameworks: https://gist.github.com/davidfowl/8939f305567e1755412d6dc0b8baf1b7 +- Example .NET package and the frameworks it supports: https://www.nuget.org/packages/System.IO.FileSystem/ +- Currently supported Runtime Identifier (RID) values: https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog +- System.IO.FileSystem package details: https://www.nuget.org/packages/System.IO.FileSystem/ + +## Roslyn, SDKs, and project templates +- Roslyn compiler: https://github.com/dotnet/roslyn +- .NET project SDKs: https://docs.microsoft.com/en-us/dotnet/core/project-sdk/overview +- global.json overview: https://docs.microsoft.com/en-us/dotnet/core/tools/global-json +- Additional `dotnet new` templates: https://dotnetnew.azurewebsites.net/ +- Tutorial: Create an item template: https://docs.microsoft.com/en-us/dotnet/core/tutorials/cli-templates-create-item-template + +## Packaging and publishing +- PDB files: https://www.wintellect.com/pdb-files-what-every-developer-must-know/ +- Single-file app issue: https://github.com/dotnet/runtime/issues/36590 +- App trimming: https://devblogs.microsoft.com/dotnet/app-trimming-in-net-5/ +- The PackageReference format: https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets +- NuGet packages: https://www.nuget.org/packages +- Announcing NuGet 6.0: https://devblogs.microsoft.com/nuget/announcing-nuget-6/ +- .NET Core application publishing overview: https://docs.microsoft.com/en-us/dotnet/core/deploying/ +- How to Deploy .NET apps to Raspberry Pi: https://www.ryadel.com/en/deploy-net-apps-raspberry-pi/ +- How to solve a circular reference using an interface: https://stackoverflow.com/questions/6928387/how-to-solve-circular-reference +- Semantic versioning: http://semver.org + +## Decompiling .NET +- Is it possible to “decompile” a Windows .exe? Or at least view the Assembly? https://stackoverflow.com/questions/273145/is-it-possible-to-decompile-a-windows-exe-or-at-least-view-the-assembly +- IDA Freeware Download Page: https://www.hex-rays.com/products/ida/support/download_freeware/ + +## Porting from .NET Framework to modern .NET +- Overview of porting from .NET Framework to .NET Core: https://docs.microsoft.com/en-us/dotnet/core/porting/ +- What .NET Developers ought to know: https://www.hanselman.com/blog/WhatNETDevelopersOughtToKnowToStartIn2017.aspx +- Introducing the .NET Upgrade Assistant Preview: https://devblogs.microsoft.com/dotnet/introducing-the-net-upgrade-assistant-preview/ +- .NET Upgrade Assistant: https://dotnet.microsoft.com/platform/upgrade-assistant +- Discover cross-platform issues: https://docs.microsoft.com/en-us/dotnet/standard/analyzers/api-analyzer#discover-cross-platform-issues +- Amazon Porting Assistant for .NET: https://aws.amazon.com/porting-assistant-dotnet/ + +## Preview features +- Preview Features: https://github.com/dotnet/designs/blob/main/accepted/2021/preview-features/preview-features.md + +# Chapter 8 - Working with Common .NET Types + +## Working with numbers +- Numerics types: https://docs.microsoft.com/en-us/dotnet/standard/numerics +- The Half type: https://devblogs.microsoft.com/dotnet/introducing-the-half-type/ +- nint and nuint types (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/nint-nuint +- nint Struct: https://docs.microsoft.com/en-us/dotnet/api/system.nint +- Names for large numbers: https://en.wikipedia.org/wiki/Names_of_large_numbers + +## Working with text and regular expressions +- String Class: https://docs.microsoft.com/en-us/dotnet/api/system.string +- Regex Class: https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex +- Regular expressions in .NET: https://docs.microsoft.com/en-us/dotnet/articles/standard/base-types/regular-expressions +- Regular Expression Language – Quick Reference: https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference +- Unicode in regular expressions: https://www.regular-expressions.info/unicode.html +- Using a regular expression to split a comma-separated string: https://stackoverflow.com/questions/18144431/regex-to-split-a-csv +- To specify a Unicode character, use `\u` followed by four characters specifying the number of the character. For example, `\u00c0` is the À character: https://www.regular-expressions.info +- Performance improvements in .NET 5: https://devblogs.microsoft.com/dotnet/regex-performance-improvements-in-net-5/ + +## Dates and times +- Date, Time, and Time Zone Enhancements in .NET 6: https://devblogs.microsoft.com/dotnet/date-time-and-time-zone-enhancements-in-net-6/ +- .NET 6: Date and Time Structures: https://www.infoq.com/news/2021/04/Net6-Date-Time/ +- Noda Time: A better date and time API for .NET: https://nodatime.org/ + +## Collections +- Collections (C# and Visual Basic): https://docs.microsoft.com/en-us/dotnet/api/system.collections +- Collections: https://docs.microsoft.com/en-us/dotnet/standard/collections +- Concurrent collections: https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent +- What types should I use to pass collections in C#? https://markheath.net/post/passing-collections-csharp +- On Abstractions and For-Each Performance in C#: https://www.infoq.com/articles/For-Each-Performance/ + +## Spans +- Span: https://docs.microsoft.com/en-us/dotnet/api/system.span-1 +- How spans work internally: https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp-all-about-span-exploring-a-new-net-mainstay + +## Networking +- .NET 6 Networking Improvements: https://devblogs.microsoft.com/dotnet/dotnet-6-networking-improvements/ + +## Assemblies and reflection +- .NET API Reference: https://docs.microsoft.com/en-us/dotnet/api/ +- Compiler-generated display class: http://stackoverflow.com/a/2509524/55847 +- Dynamically load assemblies that are not currently referenced: https://docs.microsoft.com/en-us/dotnet/standard/assembly/unloadability-howto +- Dynamically execute code: https://docs.microsoft.com/en-us/dotnet/api/system.reflection.methodbase.invoke +- Dynamically generate new code and assemblies: https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.assemblybuilder +- Extending Metadata Using Attributes: https://docs.microsoft.com/en-us/dotnet/standard/attributes/ + +## Working with images +- ImageSharp: https://github.com/SixLabors/ImageSharp + +## Internationalization +- Globalizing and localizing .NET applications: https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/ +- Time zones: https://devblogs.microsoft.com/dotnet/cross-platform-time-zones-with-net-core/ + +# Chapter 9 - Working with Files, Streams, and Serialization + +## File system, encoding, and streams +- File System and the Registry (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/file-system/ +- Character encoding in .NET: https://docs.microsoft.com/en-us/dotnet/articles/standard/base-types/character-encoding +- Async streams tutorial: https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/generate-consume-asynchronous-stream +- How pipelines help with I/O performance: https://devblogs.microsoft.com/dotnet/system-io-pipelines-high-performance-io-in-net/ + +## Serialization +- Serialization (C#): https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/concepts/serialization/ +- Serializing to Files, TextWriters, and XmlWriters: https://docs.microsoft.com/en-us/dotnet/standard/linq/serialize-files-textwriters-xmlwriters + +## JSON +- Newtonsoft Json.NET: https://www.newtonsoft.com/json +- System.Text.Json APIs: https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/ +- Issues solved by the new JSON APIs, including JamesNK's comments: https://github.com/dotnet/corefx/issues/33115 +- How to migrate from Newtonsoft.Json to System.Text.Json: https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to +- What’s next for System.Text.Json? https://devblogs.microsoft.com/dotnet/whats-next-for-system-text-json/ + +# Chapter 10 - Working with Data Using Entity Framework Core + +## Legacy EF 6 +- Entity Framework 6.3 and its .NET Core 3.0 and later support: https://devblogs.microsoft.com/dotnet/announcing-ef-core-3-0-and-ef-6-3-general-availability/ + +## EF Core +- EF Core documentation: https://docs.microsoft.com/en-us/ef/core/ +- EF Core team's plans: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/plan +- New features in EF Core 5: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-5.0/whatsnew +- New features in EF Core 6: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-6.0/whatsnew +- Get to Know EF Core 6: https://devblogs.microsoft.com/dotnet/get-to-know-ef-core-6/ +- Announcing the Plan for EF7: https://devblogs.microsoft.com/dotnet/announcing-the-plan-for-ef7/ +- Plans for Entity Framework Core 6.0 revealed as Microsoft admits it is unlikely to match Dapper for performance: https://www.theregister.com/2021/01/19/entity_framework_core_6/ +- Entity Framework Community Standup - Performance Tuning an EF Core App: https://www.youtube.com/watch?v=VgNFFEqwZPU + +## EF Core database providers +- EF Core database providers: https://docs.microsoft.com/en-us/ef/core/providers/ +- Devart database providers: https://www.devart.com/dotconnect/entityframework.html +- Check the latest NuGet package version: https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite/ +- Document Database Providers for Entity Framework Core: https://github.com/BlueshiftSoftware/EntityFrameworkCore + +## SQLite +- Download SQLite: https://www.sqlite.org/download.html +- SQL statements supported by SQLite: https://sqlite.org/lang.html +- Download SQLiteStudio: http://sqlitestudio.pl + +## Microsoft SQL Server +- Try SQL Server on-premises or in the cloud: https://www.microsoft.com/en-us/sql-server/sql-server-downloads +- Download SQL Server Management Studio (SSMS): https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms +- Quickstart: Connect and query a SQL Server instance using SQL Server Management Studio (SSMS): https://docs.microsoft.com/en-us/sql/ssms/quickstarts/ssms-connect-query-sql-server +- Quickstart: Connect and query an Azure SQL Database or an Azure Managed Instance using SQL Server Management Studio (SSMS): https://docs.microsoft.com/en-us/sql/ssms/quickstarts/ssms-connect-query-azure-sql +- Use Visual Studio Code to create and run Transact-SQL scripts: https://docs.microsoft.com/en-us/sql/tools/visual-studio-code/sql-server-develop-use-vscode +- .NET Interactive with SQL!| .NET Notebooks in Visual Studio Code: https://devblogs.microsoft.com/dotnet/net-interactive-with-sql-net-notebooks-in-visual-studio-code/ + +## NoSQL data stores +- Welcome to Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/introduction +- Use NoSQL databases as a persistence infrastructure: https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/nosql-database-persistence-infrastructure + +## EF Core models +- EF Core model conventions: https://docs.microsoft.com/en-us/ef/core/modeling/ +- Data seeding: https://docs.microsoft.com/en-us/ef/core/modeling/data-seeding +- Humanizer library: http://humanizr.net +- Scaffolding: https://docs.microsoft.com/en-us/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli +- Deep Dive into Many-to-Many: A Tour of EF Core 5.0: https://channel9.msdn.com/Shows/On-NET/Deep-Dive-into-Many-to-Many-A-Tour-of-EF-Core-50-pt-2 +- Naming Conventions for Entity Framework Core Tables and Columns: https://github.com/efcore/EFCore.NamingConventions + +## EF Core querying and manipulating +- Filtered include: https://docs.microsoft.com/en-us/ef/core/querying/related-data/eager#filtered-include +- Query tags: https://docs.microsoft.com/en-us/ef/core/querying/tags +- Loading patterns: https://docs.microsoft.com/en-us/ef/core/querying/related-data +- Pooling database contexts: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#dbcontext-pooling + +# Chapter 11 - Querying and Manipulating Data Using LINQ + +## LINQ concepts +- Expression trees: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/ +- LINQ comprehension syntax: https://stackoverflow.com/questions/6229187/linq-why-is-it-called-comprehension-syntax +- LINQ in C#: https://docs.microsoft.com/en-us/dotnet/csharp/linq/linq-in-csharp +- New LINQ extensions in .NET 6 and benchmarks: https://blog.elmah.io/new-linq-extensions-in-net-6-and-benchmarks/ + +## LINQ providers +- EF Core LINQ queries no longer evaluated at client: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.x/breaking-changes#linq-queries-are-no-longer-evaluated-on-the-client +- Parallel LINQ (PLINQ): https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/introduction-to-plinq +- LINQ to XML Overview (C#): https://docs.microsoft.com/en-gb/dotnet/csharp/programming-guide/concepts/linq/linq-to-xml-overview + +## LINQ samples and tools +- 101 LINQ Samples: https://docs.microsoft.com/en-us/samples/dotnet/try-samples/101-linq-samples/ +- LINQPad: https://www.linqpad.net/ + +# Chapter 12 - Improving Performance and Scalability Using Multitasking + +## Threads +- Threads and threading: https://docs.microsoft.com/en-us/dotnet/standard/threading/threads-and-threading +- Thread pool: https://docs.microsoft.com/en-us/dotnet/standard/threading/the-managed-thread-pool + +## Tasks +- Pros and cons of different ways to start tasks: https://devblogs.microsoft.com/pfxteam/task-factory-startnew-vs-new-task-start/ +- Task.Start Method: https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.start + +## Thread safety +- Events and thread-safety: https://docs.microsoft.com/en-us/archive/blogs/cburrows/field-like-events-considered-harmful +- Stephen Cleary's thoughts on events and thread-safety: https://blog.stephencleary.com/2009/06/threadsafe-events.html +- Managed threading best practices: https://docs.microsoft.com/en-us/dotnet/standard/threading/managed-threading-best-practices +- ThreadStaticAttribute Class: https://docs.microsoft.com/en-us/dotnet/api/system.threadstaticattribute + +## async and await +- Async in depth: https://docs.microsoft.com/en-us/dotnet/standard/async-in-depth +- await (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/await +- Six Essential Tips for Async: https://channel9.msdn.com/Series/Three-Essential-Tips-for-Async +- Exploring the async/await State Machine – The Awaitable Pattern: https://vkontech.com/exploring-the-async-await-state-machine-the-awaitable-pattern/ +- There Is No Thread: https://blog.stephencleary.com/2013/11/there-is-no-thread.html + +## Parallel programming +- Parallel Programming in .NET: https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/ + +## Sharing resouces and synchronization +- Overview of synchronization primitives: https://docs.microsoft.com/en-us/dotnet/standard/threading/overview-of-synchronization-primitives + +# Chapter 13 - Introducing Practical Applications of C# and .NET + +## .NET apps +- .NET Application Architecture Guidance: https://www.microsoft.com/net/learn/architecture + +## .NET Content Management Systems +- Piranha CMS: https://piranhacms.org/ +- Orchard Core: http://www.orchardcore.net/ +- Optimizely CMS Developer Guide: https://world.optimizely.com/documentation/developer-guides/CMS/ +- Umbraco CMS: https://umbraco.com/products/umbraco-cms/migrating-umbraco-to-net-core/ + +## ASP.NET versions and features +- ASP.NET Core 1.0 announcement: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-1-0/ +- ASP.NET Core 1.1 announcement: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-1-1/ +- ASP.NET Core 2.0 announcement: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-2-0/ +- ASP.NET Core 2.1 announcement: https://devblogs.microsoft.com/aspnet/asp-net-core-2-1-0-now-available/ +- ASP.NET Core 2.2 announcement: https://devblogs.microsoft.com/aspnet/asp-net-core-2-2-available-today/ +- ASP.NET Core 3.0 announcement: https://devblogs.microsoft.com/aspnet/a-first-look-at-changes-coming-in-asp-net-core-3-0/ +- ASP.NET Core 3.1 announcement: https://devblogs.microsoft.com/aspnet/asp-net-core-updates-in-net-core-3-1/ +- Blazor WebAssembly announcement: https://devblogs.microsoft.com/aspnet/blazor-webassembly-3-2-0-now-available/ +- ASP.NET Core 5.0 announcement: https://devblogs.microsoft.com/aspnet/announcing-asp-net-core-in-net-5/ + +## Web development technologies +- WebSocket: https://en.wikipedia.org/wiki/WebSocket +- MessagePack: https://msgpack.org +- WebAssembly: https://webassembly.org +- TypeScript: https://www.typescriptlang.org + +## Windows desktop app development +- Choices of platform for building Windows desktop apps: https://docs.microsoft.com/en-us/windows/apps/desktop/choose-your-platform +- What’s new in Windows Forms in .NET 6.0: https://devblogs.microsoft.com/dotnet/whats-new-in-windows-forms-in-net-6-0/ +- Migrating WPF apps: https://devblogs.microsoft.com/dotnet/migrating-a-sample-wpf-app-to-net-core-3-part-1/ +- Windows Compatibility Pack: https://devblogs.microsoft.com/dotnet/announcing-the-windows-compatibility-pack-for-net-core/ +- Packt book about building WPF apps: https://www.packtpub.com/product/mastering-windows-presentation-foundation/9781785883002 +- UWP apps: https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide +- Nine desktop development options, from WPF to Blazor: https://visualstudiomagazine.com/articles/2021/03/25/desktop-options.aspx + +## Third-party cross-platform GUI development +- avalonia - A cross platform XAML framework for .NET: https://avaloniaui.net +- Uno Platform: https://platform.uno +- Getting Started with the Uno Platform (Project Reunion/WinUI): https://nicksnettravels.builttoroam.com/getting-started-uno-platform/ + +# Chapter 14 - Building Websites Using ASP.NET Core Razor Pages + +## General web development +- HTML5 and CSS3: Building Responsive Websites: https://www.packtpub.com/producthtml5-and-css3-building-responsive-websites/9781787124813h +- Kestrel web server: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel +- Free TLS/SSL certificates: https://letsencrypt.org +- ASP.NET Core hosting environments: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments +- Content Delivery Network (CDN): https://en.wikipedia.org/wiki/Content_delivery_network +- Bootstrap: https://getbootstrap.com/ +- Compact Folders feature: https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_41.md#compact-folders-in-explorer + +## ASP.NET Core +- Announcing ASP.NET Core in .NET 6: https://devblogs.microsoft.com/dotnet/announcing-asp-net-core-in-net-6/ +- ASP.NET Core fundamentals: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/ +- Static files in ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files +- HttpContext class: https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcontext + +## Razor Pages and layouts +- Introducing the new Razor editor in Visual Studio 2022: https://devblogs.microsoft.com/visualstudio/introducing-the-new-razor-editor-in-visual-studio-2022/ +- Introduction to Razor Pages in ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/razor-pages/ +- Razor syntax reference for ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor +- Layout in ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/layout +- Tag Helpers in ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro +- ASP.NET Core Razor Pages with EF Core: https://docs.microsoft.com/en-us/aspnet/core/data/ef-rp/intro +- Registering a database context for use as a dependency service: https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext#using-dbcontext-with-dependency-injection +- The `` tag helper: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper + +## Endpoint routing +- Simple examples of Run, Map, and Use: https://www.vaughanreid.com/2020/05/using-in-line-middleware-in-asp-net-core/ +- Automatically visualize your endpoints: https://andrewlock.net/visualizing-asp-net-core-endpoints-using-graphvizonline-and-the-dot-language/ +- Configuring the HTTP pipeline with middleware: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware +- DEEP DIVE: HOW IS THE ASP.NET CORE MIDDLEWARE PIPELINE BUILT? https://www.stevejgordon.co.uk/how-is-the-asp-net-core-middleware-pipeline-built + +# Chapter 15 - Building Websites Using the Model-View-Controller Pattern + +## Security and privacy +- Built-in features for compliance with modern privacy requirements like GDPR: https://docs.microsoft.com/en-us/aspnet/core/security/gdpr +- ASP.NET Core's support for authenticator apps: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-enable-qrcodes +- Identity UI library: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?tabs=netcore-cli +- Authorization: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction +- Anti-forgery tokens: https://docs.microsoft.com/en-us/aspnet/core/security/anti-request-forgery + +## Setting up and configuring +- dotnet new templates: https://github.com/dotnet/templating/wiki/Available-templates-for-dotnet-new +- Overview of ASP.NET Core MVC: https://docs.microsoft.com/en-us/aspnet/core/mvc/overview +- Default configuration of web hosts: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/web-host +- Dependency injection for ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection +- Configuring middleware: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/ +- Announcing YARP 1.0 Release: https://devblogs.microsoft.com/dotnet/announcing-yarp-1-0-release/ + +## Controllers +- Handle requests with controllers in ASP.NET Core MVC: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/actions +- Response caching: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/response +- How cache busting using query strings works: https://stackoverflow.com/questions/9692665/cache-busting-via-params + +## Models +- Model Binding in ASP.NET Core: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding +- Create your own model binders by implementing the IModelBinder interface: https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding +- Model validation: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation +- Tutorial: Get started with EF Core in an ASP.NET MVC web app: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro + +## Views +- HtmlHelper class: https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.viewfeatures.htmlhelper +- Views in ASP.NET Core MVC: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/overview +- Why it is good to put