From 254e89abefd28419bd2f36a047e4df939f7ff8da Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Tue, 15 Nov 2016 22:23:43 -0800 Subject: [PATCH] Add .NET Components article (#1232) * Add .NET Components article * Add to TOC and metadata fixes * Fix error in paragraph * More fixed * Reword awkward targeting sentence * Fix links * Better picture * Feedback * .NET Architectural components as the name name --- docs/standard/about.md | 2 +- docs/standard/components.md | 81 +++++++++++++++++ docs/standard/concepts.md | 138 ----------------------------- docs/standard/index.md | 2 +- docs/standard/media/components.png | Bin 0 -> 73687 bytes docs/standard/tour.md | 2 +- docs/toc.md | 2 +- 7 files changed, 85 insertions(+), 142 deletions(-) create mode 100644 docs/standard/components.md delete mode 100644 docs/standard/concepts.md create mode 100644 docs/standard/media/components.png diff --git a/docs/standard/about.md b/docs/standard/about.md index f9634aa0143c9..9ad3d1dd663c0 100644 --- a/docs/standard/about.md +++ b/docs/standard/about.md @@ -25,7 +25,7 @@ C#, F# and Visual Basic are popular languages that target and rely on the .NET p There is great diversity across these languages, in philosophy and syntax, but also symmetry provided by a shared type system. This type system is provided by the underlying runtime environment. .NET was designed around the idea of a "common language runtime" that could support the requirements of diverse languages -- for example, dynamic and statically typed languages -- and enable interoperability between them. For example, it's possible to pass a collection of `People` objects between languages with no loss in semantics or capability. -Multiple [.NET implementations and products](concepts.md) are available, based on open [.NET Standards](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/dotnet-standards.md) that specify the fundamentals of the platform. They are separately optimized for different application types (for example, desktop, mobile, gaming, cloud) and support many chips (for example, x86/x64, ARM) and operating systems (for example, Windows, Linux, iOS, Android, macOS). Open source is also an important part of the .NET ecosystem, with multiple .NET implementations and many libraries available under OSI-approved licenses. +Multiple [.NET implementations and products](components.md) are available, based on open [.NET Standards](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/dotnet-standards.md) that specify the fundamentals of the platform. They are separately optimized for different application types (for example, desktop, mobile, gaming, cloud) and support many chips (for example, x86/x64, ARM) and operating systems (for example, Windows, Linux, iOS, Android, macOS). Open source is also an important part of the .NET ecosystem, with multiple .NET implementations and many libraries available under OSI-approved licenses. - Learn about [.NET](index.md) - Learn about [C#](../csharp/index.md) diff --git a/docs/standard/components.md b/docs/standard/components.md new file mode 100644 index 0000000000000..1546bfe10fdc6 --- /dev/null +++ b/docs/standard/components.md @@ -0,0 +1,81 @@ +--- +title: .NET Architectural Components +description: Describes key .NET architectural components such as the .NET Standard Library, .NET runtimes, and tooling. +keywords: .NET, .NET Standard Library, .NET Standard, .NET Core, .NET Framework, Xamarin, MSBuild, C#, F#, VB, compilers +author: cartermp +manager: wpickett +ms.author: cartermp +ms.date: 11/16/2016 +ms.topic: article +ms.prod: .net +ms.technology: .net-core-technologies +ms.devlang: dotnet +ms.assetid: 2e38e9d9-8284-46ee-a15f-199adc4f26f4 +--- + +# .NET Architectural Components + +.NET is made up of a number of key components. It has a standard library, called the .NET Standard Library, which is a large set of APIs which runs everywhere. This standard library is implemented by three .NET runtimes - .NET Framework, .NET Core, and Mono for Xamarin. The .NET languages also run on any .NET runtime. Additionally, there are tools on every platform which allow you to build projects. These tools are the same regardless of your choice of runtime. + +Here's a graphical overview of each of the previously mentioned components of .NET and how they fit. + +![All .NET Architectural Components Together](media/components.png) + +What follows is a brief explanation of each of the key components shown above. + +## .NET Standard Library + +The .NET Standard Library is a set of APIs which are implemented by a .NET runtime. + +More formally, it is a specification of .NET APIs which make up a uniform set of contracts that you compile your code against. These contracts have underlying implementations for each .NET runtime. This enables portability across different .NET runtimes, making it so that your code can effectively "run everywhere". + +The .NET Standard Library is also a build target, where it is known as the .NET Standard. You can currently target .NET Standard 1.0-1.6. If your code targets a version of the .NET Standard, it is guaranteed to run on any .NET runtime which implements that version. + +To learn more about the .NET Standard library and targeting the .NET Standard, see [.NET Standard Library](library.md). + +## .NET runtimes + +There are 3 primary .NET runtimes which Microsoft actively develops and maintains: .NET Core, .NET Framework, and Mono for Xamarin. + +### .NET Core + +.NET Core is a cross-platform runtime optimized for server workloads. It implements the .NET Standard Library, which means that any code that targets the .NET Standard can run on .NET Core. It is the runtime used by ASP.NET Core and the Universal Windows Platform (UWP). It is modern, efficient, and designed to handle server and cloud workloads at scale. + +To learn more about .NET Core, see the [.NET Core Guide](../core/index.md). + +### .NET Framework + +.NET Framework is the historical .NET runtime that has existed since 2002. It is the same .NET Framework existing .NET developers have always used. It implements the .NET Standard Library, which means that any code that targets the .NET Standard can run on the .NET Framework. It contains additional Windows-specific APIs, such as APIs for Windows desktop development with Windows Forms and WPF. .NET Framework is optimized for building Windows desktop applications. + +To learn more about the .NET Framework, see the [.NET Framework Guide](../framework/index.md). + +### Mono for Xamarin + +Mono is the runtime used by Xamarin apps. It implements the .NET Standard Library, which means that any code that targets the .NET Standard can run on Xamarin apps. It contains additional APIs for iOS, Android, Xamarin.Forms, and Xamarin.Mac. It is optimized for building mobile applications on iOS and Android. + +To learn more about Mono, see the [Mono documentation](http://www.mono-project.com/docs/). + +## .NET tooling and common infrastructure + +Tooling for .NET is also common across each implementation of .NET. These include, but are not limited to: + +* The .NET languages and their compilers +* Runtime components, such as the JIT and Garbage Collector +* .NET project system (sometimes known as "csproj", "vbproj", or "fsproj") +* MSBuild, the build engine used to build projects +* NuGet, Microsoft's package manager for .NET +* The .NET CLI, a cross-platform command-line interface for building .NET projects +* Open Source build orchestration tools, such as CAKE and FAKE + +The main takeaway here should be that there is a vast amount of tooling and infrastructure which is common for any "flavor" of .NET you choose to build your apps with. + +## Next Steps + +To learn more, visit the following: + +* [.NET Standard Library](library.md) +* [.NET Core Guide](../core/index.md) +* [.NET Framework Guide](../framework/index.md) +* [C# Guide](../csharp/index.md) +* [F# Guide](../csharp/index.md) +* [VB.NET Guide](../csharp/index.md) \ No newline at end of file diff --git a/docs/standard/concepts.md b/docs/standard/concepts.md deleted file mode 100644 index 5711effdbcf93..0000000000000 --- a/docs/standard/concepts.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: .NET Products -description: .NET Products -keywords: .NET, .NET Core -author: richlander -manager: wpickett -ms.date: 06/23/2016 -ms.topic: article -ms.prod: .net-core -ms.technology: .net-core-technologies -ms.devlang: dotnet -ms.assetid: 2e38e9d9-8284-46ee-a15f-199adc4f26f4 ---- - -#.NET Concepts - ->[!WARNING] -This article will be rewritten. - -.NET is a very flexible, general purpose and inherently cross-platform [specification](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/dotnet-standards.md) for building developer products. It is used for all of the most popular app categories: desktop, mobile, cloud, gaming and IoT. - -There are two subtly different terms used in this document: - -- ".NET product" - Enables you to build an app for one or more target platforms. -- ".NET implementation" - Some combination of a runtime, framework and tools that can execute ".NET code" on which products are based. - -## Product Categories - -.NET products are available for each of the following product categories. - -### Desktop - -You can build desktop apps for Windows and macOS. - -- [Universal Windows Apps](https://developer.microsoft.com/windows) with [.NET Native](#net-native) -- [Windows Presentation Foundation (WPF)](https://msdn.microsoft.com/library/ms754130.aspx) for Windows with the [.NET Framework](#net-framework) -- [Windows Forms](https://msdn.microsoft.com/library/dd30h2yb.aspx) for Windows with the [.NET Framework](#net-framework) -- Cocoa for macOS with [Xamarin](#xamarin-sdk) -- [Electron](http://electron.atom.io/) for cross-platform desktop with [electron-edge](https://github.com/kexplo/electron-edge) - -### Games - -You can build games for many desktop, mobile, console and virtual/augmented reality devices. - -- [CRYENGINE](http://docs.cryengine.com/display/CEPROG/CE%23+Programming) with [Mono](#mono) -- [MonoGame](http://www.monogame.net/documentation/?page=main) with [Mono](#mono) -- [Unity](http://docs.unity3d.com/Manual/index.html) with [Mono](#mono) - -### IoT - -You can build IoT apps for Windows 10 IoT Core, including Raspberry Pi 2/3. - -- [Windows 10 IoT Core](https://developer.microsoft.com/windows/iot) with [.NET Native](#net-native) - -### Mobile - -You can build Mobile apps for iOS, Android and Windows. - -- iOS app with [Xamarin](#xamarin-sdk) -- Android app with [Xamarin](#xamarin-sdk) -- [Universal Windows App](https://developer.microsoft.com/windows) with [.NET Native](#net-native) - -### Web and Cloud - -You can build Web and Cloud apps for Windows and Linux. - -- [ASP.NET](http://www.asp.net/) for Windows with the [.NET Framework](#net-framework) -- [ASP.NET Core](http://docs.asp.net/) for Windows, macOS and Linux with [.NET Core](#net-core) - -.NET Implementations --------------------- - -Major commercial and open source .NET implementations are listed below, in alphabetical order. - -### .NET Core - -.NET Core is used to build device, web, cloud and embedded/IoT apps. It is [open source](https://github.com/dotnet/core) and cross-platform, supporting Windows, macOS and Linux. [ASP.NET Core](http://docs.asp.net/) is the most popular workload for .NET Core. You can use it to build web apps and services, for on-premises and cloud deployment. You can also use .NET Core to build tools, utilities and cloud worker apps. - -- Learn about [.NET Core](../core/index.md) -- Learn about [ASP.NET Core](http://docs.asp.net/) -- [Download .NET Core](http://dot.net/core) - -The following are the main characteristics of .NET Core: - -**Cross-platform** - .NET Core supports three operating systems families: Linux, Windows and macOS. .NET Core apps are cross-platform by default. You can write apps and libraries that run unmodified across supported OSes. - -**Open Source** - [.NET Core](https://github.com/dotnet/core) is available on GitHub, licensed with the [MIT](https://github.com/dotnet/coreclr/blob/master/LICENSE.TXT) and [Apache 2](https://github.com/dotnet/roslyn/blob/master/License.txt) licenses (licensing is per component). Documentation is [CC-BY](https://github.com/dotnet/core-docs/blob/master/license.txt). .NET Core also makes use of a significant set of open source industry dependencies, listed in the [.NET Core release notes](https://github.com/dotnet/core/releases). - -**Natural acquisition** - NET Core is distributed in several forms, aligning with specific developer needs. You can acquire .NET Core with the [.NET Core SDK](https://dot.net/core) installer (or zips) or via OS-specific package managers, such as APT and Yum. [Official .NET Core Docker images](https://hub.docker.com/r/microsoft/dotnet/) are available on Docker Hub. Higher-level framework libraries and the larger .NET library ecosystem are available on [NuGet](http://www.nuget.org/). - -**Modular platform** - .NET Core is built with a modular design, enabling applications to include only the .NET Core libraries and dependencies that are needed. Each application makes its own .NET Core versioning choices, avoiding conflicts with shared components. This approach aligns with the trend of developing software using container technologies like Docker. - -### .NET Framework - -The .NET Framework is used to build apps for Windows and Windows Server. You can use it to build rich user interfaces with Windows Presentation Framework (WPF) and Windows Forms. It also supports building server apps with ASP.NET Web Forms, ASP.NET MVC and Windows Communication Framework (WCF). Visual Studio provides rich designer experiences for the .NET Framework, making it easy to build both client and server apps. It is the best choice for writing apps for Windows. - -- Learn about the [.NET Framework](https://msdn.microsoft.com/library/w0x726c2.aspx) -- [Download .NET Framework](https://dot.net) - -[Windows Forms](https://msdn.microsoft.com/library/dd30h2yb.aspx) enables you to build a "forms over data" desktop UI more rapidly than any other technology. It uses a designer that enables drag-and-drop of UI and non-UI controls, reducing most development tasks into a single gesture and conceptual model. - -[Windows Presentation Foundation (WPF)](https://msdn.microsoft.com/library/ms754130.aspx) separates code and UI concerns by describing UI with the [XAML](https://msdn.microsoft.com/library/ms752059.aspx) markup language. WPF is very flexible and is often used for UIs that require a more complex user model or a more elegant appearance. - -[Windows Communication Foundation (WCF)](https://msdn.microsoft.com/library/ms731082.aspx) is a set of libraries for SOAP Web Services. It allows you to create services that can communicate through various supported protocols using various data formats, and that can be hosted in any process you choose. This leads to one of the major features of WCF: your services are not tied to any particular hosting strategy or approach. - -[ASP.NET](http://www.asp.net/) is a web framework. It has several distinct pieces which are used to produce modern and high-performance web applications. - -- [ASP.NET Web Forms](http://www.asp.net/web-forms) enables you to build a "forms over data" UI more rapidly than most other Web technologies, with a designer that enables drag-and-drop of web controls. -- [ASP.NET MVC](http://www.asp.net/mvc) gives you greater control over the entire web pipeline, from the HTTP layer to the user interface. -- [ASP.NET WebAPI](http://www.asp.net/web-api) is a convention-based framework for creating REST services. -- [SignalR](http://www.asp.net/signalr) allows you to provide push-based communication to your web applications using the [WebSocket](https://en.wikipedia.org/wiki/WebSocket) protocol. - -### .NET Native - -.NET Native is a set of native build tools for .NET Core. .NET Native is an Ahead-of-Time (AOT) toolchain that produces native applications by compiling IL byte code to native machine code. This means that the resulting binary is what the OS executes; there is no JIT-ing, no runtime compilation. This leads to better startup performance, as well as some security benefits. - -.NET Native is primarily used by .NET [Universal Windows Platform (UWP)](https://msdn.microsoft.com/library/windows/apps/dn726767.aspx) applications. - -### Mono - -[Mono](http://www.mono-project.com/docs/about-mono/) is the original open source and cross-platform implementation of .NET, from the community [Mono Project](http://mono-project.com). It is now sponsored by Microsoft. It can be thought of as an open and cross-platform version of the .NET Framework. Its APIs follow the progress of the .NET Framework, not .NET Core. - -There are several components that make up Mono: - -**C# Compiler** - Mono’s C# compiler is feature complete for C# 6. - -**Mono Runtime** - The runtime implements the ECMA Common Language Infrastructure (CLI). The runtime provides a Just-in-Time (JIT) compiler, an Ahead-of-Time compiler (AOT), a library loader, the garbage collector, a threading system and interoperability functionality. - -**Base Class Library** - The Mono platform provides a comprehensive set of classes that provide a solid foundation to build applications on. These classes are compatible with Microsoft’s .Net Framework classes. - -**Mono Class Library** - Mono also provides many classes that go above and beyond the Base Class Library provided by the .NET Framework. These provide additional functionality that are useful, especially in building Linux applications. Some examples are classes for Gtk+, Zip files, LDAP, OpenGL, Cairo, POSIX, etc. - -### Xamarin SDK - -The [Xamarin SDK](http://open.xamarin.com) is used to build native mobile and device apps, primarily for Apple and Google ecosystems. It is based on Mono and is open source using the MIT license. You can use it to build iOS and Android apps for phones, tablets and watches. [Xamarin.Forms](https://www.xamarin.com/forms) is a popular way to write reusable UIs across Apple, Google and Windows apps. - -- Learn about the [Xamarin SDK](https://developer.xamarin.com/) -- [Download Xamarin](https://www.xamarin.com/platform) diff --git a/docs/standard/index.md b/docs/standard/index.md index 196011897b82d..c5c2c7c5b1c50 100644 --- a/docs/standard/index.md +++ b/docs/standard/index.md @@ -25,7 +25,7 @@ C#, F# and Visual Basic are popular languages that target and rely on the .NET p There is great diversity across these languages, in philosophy and syntax, but also symmetry provided by a shared type system. This type system is provided by the underlying runtime environment. .NET was designed around the idea of a "common language runtime" that could support the requirements of diverse languages -- for example, dynamic and statically typed languages -- and enable interoperability between them. For example, it's possible to pass a collection of `People` objects between languages with no loss in semantics or capability. -Multiple [.NET implementations and products](concepts.md) are available, based on open [.NET Standards](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/dotnet-standards.md) that specify the fundamentals of the platform. They are separately optimized for different application types (for example, desktop, mobile, gaming, cloud) and support many chips (for example, x86/x64, ARM) and operating systems (for example, Windows, Linux, iOS, Android, macOS). Open source is also an important part of the .NET ecosystem, with multiple .NET implementations and many libraries available under OSI-approved licenses. +Multiple [.NET implementations and products](components.md) are available, based on open [.NET Standards](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/dotnet-standards.md) that specify the fundamentals of the platform. They are separately optimized for different application types (for example, desktop, mobile, gaming, cloud) and support many chips (for example, x86/x64, ARM) and operating systems (for example, Windows, Linux, iOS, Android, macOS). Open source is also an important part of the .NET ecosystem, with multiple .NET implementations and many libraries available under OSI-approved licenses. - Learn about [C#](../csharp/index.md) - Learn about [F#](../fsharp/index.md) diff --git a/docs/standard/media/components.png b/docs/standard/media/components.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5a707f8a4cd75f3a707a4601890685aa72edea GIT binary patch literal 73687 zcmd4330PCvwk~RIs$kmyRW{fFp^h!mh@#Sn5YSRe5rI;AAtFYk2~jaL2_#a84Tvcl zpb+WACPE+(NFu=`3L;9BMnggf5CM@Uggy#r_@%d)s#t&vU2Y$%1^{eqB*?qZkr|VPZpCua+sVmo*wJvx0$?dQ3-RExpNxi)J zUt;Z6=KbZs$4ypK>mS>P|9}_}9=`GYrru4jkGi_2oLx8h==wEd&z3nEa%`5UB8EX@ z%4L+sdm_d0q=@(Sum6l;+^}zqmv+UF7y|>inW-K#{sVcv$Ba+Yq}{pRte%ojg~2}< zak^i-bSD{cN-w3*1$Km5kAA(Nf4N=2*l0Uh8w7 zibnr6!-dk~&yhW|_aeHpRdX0DgEh)V*i&)!1|@Y#Fc#Kq=NAmgtRmS48MY z%+>N$4DSoiakx-66@xY(kYli)Z(B0FU%D`sfZ@(ap)2NeBy6k#zLYXFctn5XBh*h1 z_ha)t2LklM>pr;_;+7r3tyjO!zrQf}26ZrT8jc);_NWGGZ8^}{cXte%uJjfLizY@t z<*vpRTK;xkN0MW*r-~lR=Asq_o((D@hgv~OvsQ7XT~LR(lii?|Z%?Ke-(9U7_@TWR zN?64lYrb0I8jZpMj^q2{gI-Tn?k~{;?@(;4jWhZKiy0`c59kh5iQrL4| zkUhr^gvR?y)Re?dDMeAZ$_Huy`rdh2hf)VwRf$~#di3EJ9Z5S47UbAT-^VtSAp{m8 z7e?58s0yA6p^51be$F$ngN!rEgti)lKSk|Y?PHc69Yz#r^X!1#@&e1|5opLLQ`6gliTj`E-wW^g{lw+Olr;3d@)beX=(1`na zPlfARSz*tz7zcvbw+sEex5uyquKMm$JL`hTT&HtQAT8EQy6$!5P)es>uw(FrkArBE z!#qiQ#QTfje&U!!OT-i>H|qQ1d0mpsQEBr4RuNyUB`Obtg7HJ?rW2? z>AxIxjO4$h_=CFwYy1wz|9T3VOHPRdM(ituc*K5se+=9SM2(%=IdG%ih(BAe{QW7? zb&xf`U_Gpdeu44I71zj%oxY|-sQ(%_>&}-B+{|a&5qD!Z^Rig(u=sLr?Y#{ z)s%I4^)4CBy@dw{&v_Qd{0D!ox~)U$+Y%S#Yl$1Y!SfMWDL*Dh1mWi;NWAps36&Hp z7-tT;uWH{)EZc|2@}U88RG_-8G441%fTkL;ua1Uuxe%O0**1dOs+1Z~qfk($5)dL$e-=~*2LNv1=ov{AP`c-jNeXAHBv@oB`2NfF-#fnO2`p&~ISHkl`QDpGuO zQn^Vv8FdFg)>sCDEO_Wvrb5*)K&8I!gd-CDEo3P5`OJxw_5U4fd~2)`tC>xI{r%^r z3>`>(q0U7RM++@febA9`%K{Z_hq$p(5`HTFOHP>H-EfR!eoV8ymN+UwHrA~r?k|Q( z6%zwt1xc|;Av39c%97SaF6zlr&6x!Zr_9~h*-U_tp7o{aq7<@m6Fa*;dK=XYuY&@! zB0eG%zd1`ZnU5J;O90nma6x2{13IV70%mW~hn>#`%Gj~{ZtVQ65zQ)h71tkq=7(g* zdMd10V{9K?`@fGmf9ll=kC{u`hD|v9pM;y#?$i0TZsWI7==DAl#~9DJjuK{=-iTgc zyKL`tO2BHBgq`AdhPAAtHVzp8*`4Xp)bk{plKbkw>Y%$>Na}fEOd#&h4%(wO%>7xH zGQFE7N0sfBnF3_Pj9{m^OnieEUl_Ij^6M^I2KB z(e&{8$d6=W4wHe5QHW{2__&^gu+ZFeD`xzD|Jbf;R<#p#OLa!9(fH4tr9V0}MV97r z&oBpVVhi5w9df+zt##hHbcdAAGrzzBpUvb4bGY5huUi(_{zH+1B+T zaFY=ysBr<~bb|v5ARf)P4aR?iDqYe~2u2>Rsw%)|Rx^jI$sl1A6F% zv*3xzvvTx1y@)`cj=AcCP6X&Vo=(XYF8brkFFaJ?EXu@3MnNVa3XihSck5vTamuHS zI$R08FNTsM0kNwt+~uw#xjz1^IIdeI9L*LLN)e;yH=l|3G@l`)%xF*#ca=}v#0o)) zD-O)Z-6JaI=MKD{KGCC8Qb^Sr(Zx+&8JPsA@dIv#jow97zZN5j5DiGw?mWvMQ92#* zdE)9t4`DNVki~;lHaY&roITq;6s>~_(H59;7=S0nSdvVdJ#cSc(bE1BDZ;SS-6N9^ zWuJYUG$%B?B_ACf~8CwmqM;PFdK20>;n&K?lWKz(yz; zICPsqI9r(WuX@a$>W#4Vr9Q7GhmzvmkeMJ)YyL)(_xsNHyq$DXXIKixhRbgBkIQbk zQD=M>|GgQB{z$e;$~HLD*0RM=PlJzc#{b-WdjTJvn*EB8e$;>E-v{u~<3S9-N97QY znooCoo{rm7;)aIz8+MwW;+xtLrnQjy%4F)V2Y~DGSSm?-ajM?M)OPbIfBXUlBKLKq zHsKEz+ork}QY=gHAgWw0r6MDB)KYvD38GRj(?MZBy}zTuDMT>& zt!cQ^ve(|Tyh0LkFo|gsTY---SinHo1VK4Qr}M@p$hE3n4K8J^{f^@fk63&4G{~r9 zgQQ=W@I0=bVS60;n@Bx5A|OG|3Qim7NS>WZ@+_FB_4UOY>>;c=pL^?-*7>Z*b_6I+ z%pIB3;0XYMzv8P79m+oZVIA_6*Nv&f{!!%0Dm%h~pR!Sx1iw1o0+#x)Qb*Ezm8Vu7 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 literal 0 HcmV?d00001 diff --git a/docs/standard/tour.md b/docs/standard/tour.md index a6c82cad1004a..e0374b35198f6 100644 --- a/docs/standard/tour.md +++ b/docs/standard/tour.md @@ -18,7 +18,7 @@ ms.assetid: bbfe6465-329d-4982-869d-472e7ef85d93 Multiple implementations of .NET are available, based on open [.NET Standards](https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/dotnet-standards.md) that specify the fundamentals of the platform. They are separately optimized for different application types (for example, desktop, mobile, gaming, cloud) and support many chips (for example, x86/x64, ARM) and operating systems (for example, Windows, Linux, iOS, Android, macOS). Open source is also an important part of the .NET ecosystem, with multiple .NET implementations and many libraries available under OSI-approved licenses. -See the [Overview of .NET implementations](concepts.md) document to figure out all of the different editions of .NET that are available, both Microsoft's and others. +See the [Overview of .NET implementations](components.md) document to figure out all of the different editions of .NET that are available, both Microsoft's and others. This Primer will help you understand some of the key concepts in the .NET Platform and point you to more resources for each given topic. By the end of it, you should have enough information to be able to recognize significant terms and diff --git a/docs/toc.md b/docs/toc.md index 2adf6de03495e..ea0cf68bb25ad 100644 --- a/docs/toc.md +++ b/docs/toc.md @@ -4,7 +4,7 @@ # [.NET Platform Guide](standard/index.md) ## [Getting Started](standard/getting-started.md) ## [Tour of .NET](standard/tour.md) -## [.NET Concepts](standard/concepts.md) +## [.NET Architectural Components](standard/components.md) ## [.NET Standard Library](standard/library.md) ## [Frameworks and Targets](standard/frameworks.md) ## [What is "managed code"?](standard/managed-code.md)