2019-1-17 前言 C#高级编程(第11版)

C#已更新为更快的速度。主要版本7.0是
2017年3月发布,次要版本7.1和7.2很快发布
在2017年8月和2017年12月。通过项目设置,您可以
与每个应用程序一起分发,是开源的,不可用
仅适用于Windows的桌面版本,但也适用于许多不同的版本
Windows设备,以及Linux和OS X.
对于创建Web应用程序,ASP.NET Core 1.0是完整的
重写ASP.NET。此版本并非完全落后
与旧版本兼容,需要对现有版本进行一些更改
ASP.NET MVC代码(使用ASP.NET Core MVC)。但是,它也有一个
与旧版本相比有很多优点,比如a
每个网络请求的开销都较低 - 这会带来更好的效果
性能 - 它也可以在Linux上运行。 ASP.NET Web窗体是
不是此版本的一部分,因为ASP.NET Web窗体未设计
为了最好的表现;它是专为开发人员友好而设计的
关于Windows Forms应用程序开发人员已知的模式。
当然,并非所有应用程序都可以轻松更改以便使用
.NET核心。这就是为什么庞大的框架得到改善的原因
即使这些改进没有以尽快的速度完成
作为.NET核心。完整.NET Framework的新版本是4.6。
完整的.NET提供了ASP.NET Web窗体的小更新
堆。
68
注意
模式匹配和元组在第13章中介绍,
“使用C#进行功能编程。”
.NET Core 2.0专注于使现有的更容易
使用.NET Framework编写的应用程序到.NET Core。类型
.NET Core尚未提供但仍在使用的
现在有许多.NET Framework应用程序和库
使用.NET Core。 .NET已添加了20,000多个API
核心2.0。例如,二进制序列化和DataSet又回来了,
你也可以在Linux上使用这些功能。另一个特点就是
帮助将遗留应用程序带入.NET Core是Windows
兼容包(Microsoft.Windows.Compatibility)。这个NuGet
package定义了WCF,注册表访问,加密,目录的API
服务,绘图等。看到
https://github.com/dotnet/designs/blob/master/accepted/compatpack/
compat-pack.md表示当前状态。
.NET标准是一个定义应该是哪些API的规范
可在任何支持该标准的平台上使用。越高了
标准版本,可用的API越多。 .NET Standard 2.0
将标准扩展了20,000多个API,并得到了支持
.NET Framework 4.6.1,.NET Core 2.0和通用Windows
平台(Windows应用程序)以build 16299开头(Fall Creators
更新Windows 10)。
注意
选择要使用的编译器版本。
C#7引入了许多新功能(这些功能在本文中列出
简介。)这些功能中最重要的来自
函数式编程:模式匹配和元组。
69
.NET标准将在第19章“库”中详细介绍
程序集,软件包和NuGet。“
要检查您的应用程序是否可以轻松移植到.NET Core,
您可以使用.NET可移植性分析器。您可以安装此工具
Visual Studio的扩展。它分析你的二进制文件。您可以
配置哪些版本的可移植性信息
您想要获得的框架,您可以选择可移植性
有关.NET Core,.NET Framework,.NET Standard,Mono的信息,
Silverlight,Windows,Xamarin等。结果可以是JSON,
HTML和Excel。
图1-1显示了选择.NET后的摘要报告
与.NET Framework 100%兼容的框架二进制文件,
.NET Core为96.67%,Windows应用程序为69.7%。图1-
图2显示了有问题的API的详细信息。

 

选择技术并继续前进
当你知道竞争技术的原因时
框架,选择用于编程的技术更容易
应用。 例如,如果您正在创建新的Windows
在Windows Forms上下注并不是一个好主意。 代替,
您应该使用基于XAML的技术,例如Universal
Windows平台(UWP)。 当然,还有很好的理由
使用其他技术。 您需要支持Windows 7客户端吗? 在
在这种情况下,UWP不是一个选项,但WPF是。 你仍然可以创建你的
WPF应用程序的方式可以轻松切换到其他应用程序
技术,如UWP和Xamarin。

 

如果您正在创建Web应用程序,可以安全地使用ASP.NET Core
使用ASP.NET Core MVC。使用ASP.NET排除此选择
Web表单。如果您正在访问数据库,则应使用实体
Framework Core,您应该选择Managed Extensibility
框架而不是System.AddIn。
旧版应用程序仍使用Windows窗体和ASP.NET Web
表格和其他一些旧技术。它没有意义
改变现有应用程序只是为了使用新技术。必有
做出改变是一个巨大的优势 - 例如,什么时候
维护代码已经是一场噩梦和大量的重构
需要更改为更快的发布周期
客户,或使用新技术时允许减少
编码更新时间。根据遗留应用程序的类型,
切换到新技术可能不值得。您可以
允许应用程序仍然基于旧技术,因为
仍然支持Windows窗体和ASP.NET Web窗体
选择技术并继续前进
当你知道竞争技术的原因时
框架,选择用于编程的技术更容易
应用。例如,如果您正在创建新的Windows
在Windows Forms上下注并不是一个好主意。代替,
您应该使用基于XAML的技术,例如Universal
Windows平台(UWP)。当然,还有很好的理由
使用其他技术。您需要支持Windows 7客户端吗?在
在这种情况下,UWP不是一个选项,但WPF是。你仍然可以创建你的
WPF应用程序的方式可以轻松切换到其他应用程序
技术,如UWP和Xamarin。
71
未来很多年。
本书的内容基于较新的技术展示
什么是创建新应用程序的最佳选择。如果你仍然需要
维护旧版应用程序,您可以参考旧版本
本书,涵盖ASP.NET Web窗体,WCF,Windows窗体,
System.AddIn,Workflow Foundation和其他传统技术
它仍然是.NET Framework的一部分,可用于.NET Framework。

 

.NET术语


目前的.NET技术是什么? 图1-3给出了总体情况
.NET Framework,.NET Core和Mono如何关联的图片
彼此。 所有.NET Framework应用程序,.NET Core应用程序和Xamarin
如果应用程序是使用.NET构建的,则可以使用相同的库
标准。 这些技术共享相同的编译器平台,
编程语言和运行时组件。 他们不分享
相同的运行时,但它们确实在运行时共享组件。
例如,实时使用(JIT)编译器RyuJIT
.NET Framework和.NET Core。

 

 

 

使用.NET Framework,您可以创建Windows窗体,WPF和
在Windows上运行的旧版ASP.NET应用程序。
使用.NET Core,您可以创建ASP.NET Core和控制台应用程序
在不同的平台上运行。 Universal也使用.NET Core
Windows平台(UWP),但这不会使UWP可用
Linux操作系统。 UWP还使用了Windows运行时,即
仅适用于Windows。
Xamarin提供Xamarin.IoS和Xamarin.Android,库
使您能够为iPhone和Android开发C#应用程序。同
Xamarin.Forms,你有一个库来共享它们之间的用户界面
两个移动平台。 Xamarin目前仍以此为基础
Mono框架,由Xamarin开发的.NET变体。在某些
一点,这可能会改为.NET Core。但是,重要的是
所有这些技术都可以使用为其创建的相同库
.NET标准。
在图1-3的下半部分,您可以看到还有一些共享
在.NET Framework,.NET Core和Mono之间进行。运行
组件,例如垃圾收集器和RyuJIT的代码
(这是一个新的JIT编译器,用于将IL代码编译为本机代码)
共享。垃圾收集器由CLR,CoreCLR和.NET使用
本土。 CLR和使用RyuJIT即时编译器
CoreCLR。 .NET编译器平台(也称为Roslyn)和
所有这些平台都使用编程语言。

 

.NET Framework


.NET Framework 4.7已经是.NET Framework
在过去的15年中不断增强。 许多技术
在历史部分讨论过的是基于此
框架。 此框架用于创建Windows窗体和
WPF应用程序。 .NET Framework 4.7仍然提供增强功能
Windows窗体,例如支持高DPI。
如果要继续使用ASP.NET Web窗体,ASP.NET
4.7使用.NET Framework 4.7是可行的方法。 否则,你需要

注意
为了使用.NET Core开发应用程序,Microsoft创建了新的
名为.NET Core Command line(CLI)的命令行实用程序。
重写一些代码以转移到.NET Core。 视质量而定
源代码和需要添加新功能,重写代码
可能是值得的。

 

.NETCore


.NET Core是所有新技术和新技术使用的新.NET
在本书中有一个重点。这个框架是开源的 - 你可以
在http://www.github.com/dotnet上找到它。运行时是CoreCLR
库;框架包含集合类,文件系统
访问,控制台,XML以及更多内容位于CoreFX存储库中。
与.NET Framework不同,它是您需要的特定版本
必须使用.NET Core 1.0在系统上安装该应用程序
包含运行时的框架随之提供
应用。以前有时候你可能有过
将ASP.NET Web应用程序部署到共享服务器的问题
因为提供程序安装了旧版本的.NET;那些时候
消失了。现在,您可以使用应用程序提供运行时
不依赖于服务器上安装的版本。
.NET Core采用模块化方法设计。框架分裂
到大量的NuGet包列表。这样你就不必处理了
使用所有包,使用元数据包引用
较小的包一起工作。 Metapackages甚至有所改善
使用.NET Core 2.0和ASP.NET Core 2.0。使用ASP.NET Core 2.0,
你只需要引用Microsoft.AspNetCore.All来获取所有内容
ASP.NET Core Web应用程序通常需要的包。
.NET Core可以快速更新。甚至更新运行时
不影响现有的应用程序,因为运行时可以
与应用程序一起安装。现在微软可以改进.NET Core,
包括运行时,更快的发布周期。

 

请阅读第19章中有关.NET标准的详细信息。

 

 

 

NuGet包


在早期,组件是具有应用程序的可重用单元
当使用时,这种使用仍然是可能的(并且对某些组件是必要的)


您正在添加对程序集的引用以使用公共类型和
你自己的代码中的方法。但是,使用库可能意味着很多
不只是添加引用并使用它。使用库也可以
表示某些配置更改或可用于执行的脚本
一些功能的优点。这是打包的原因之一
NuGet包中的程序集。
NuGet包是一个包含程序集(或多个)的zip文件
程序集)以及配置信息和PowerShell
脚本。
使用NuGet包的另一个原因是可以找到它们
容易;它们不仅可以从微软获得,也可以从第三方获得
派对。可以在NuGet服务器上轻松访问NuGet包
http://www.nuget.org。
从Visual Studio项目中的引用,您可以打开
NuGet包管理器(参见图1-4)。在那里你可以搜索
打包并将它们添加到应用程序中。这个工具使您能够
搜索尚未发布的包(包括预发布
选项)并定义包应该在的NuGet服务器
搜索。搜索包的一个地方是您自己的共享
放置内部使用的包的目录。

 

 

注意


当您使用NuGet服务器中的第三方软件包时,您就是
如果包裹以后可用,则始终存在风险。 你还需要
检查包的支持可用性。 经常检查
用于项目链接以及使用前有关包的信息
它。 使用包源,您可以选择Microsoft和.NET
只获得Microsoft支持的软件包。 第三方包
也包括在Microsoft和.NET部分中,但它们都是
Microsoft支持的第三方软件包。

 

 

 

注意
有关NuGet包管理器的更多信息,请参阅
在第17章“Visual Studio 2015”中。

 

 

命名空间


.NET提供的类组织在名称空间中
名称以系统开头。 为了让您了解层次结构,
下表描述了一些命名空间。

 

 
System.Collections

这是集合的根命名空间。
收藏品也在其中
子名称空间,例如
System.Collections.Concurrent和
System.Collections.Generic。

System.Data  

这是访问数据库的命名空间。
System.Data.SqlClient包含类
访问SQL Server。

System.Diagnostics  

这是诊断的根命名空间
信息,例如事件记录和跟踪
(在命名空间中
System.Diagnostics.Tracing)。

System.Globalization  

这是包含类的命名空间
全球化和应用程序本地化。

System.IO  

这是File IO的命名空间,它们是
用于访问文件和目录的类。读者朋友,
作家和流都在这里。

System.Net  

这是核心网络的命名空间,
例如访问DNS服务器和创建
System.Net.Sockets的套接字。

System.Threading  

这是线程和的根命名空间
任务。 任务在其中定义
System.Threading.Tasks。

 

注意


许多新的.NET类使用以。开头的命名空间
将Microsoft命名为System而不是System
实体框架核心的Microsoft.EntityFrameworkCore
和新的Microsoft.Extensions.DependencyInjection
依赖注入框架。

 

 

Common Language Runtime

 公共语言运行时


通用Windows平台使用Native .NET进行编译
使用AOT编译器将IL转换为本机代码。这就像Xamarin.iOS。
对于所有其他方案,两个应用程序都使用.NET
使用.NET Core 1.0的框架和应用程序,一个Common
需要语言运行时(CLR)。 .NET Core使用CoreCLR
而.NET Framework使用CLR。所以,做了什么
CLR?
在CLR执行应用程序之前,任何源代码
你需要编译(用C#或其他语言编写)。
编译在.NET中分两步进行:
1.源代码汇编到Microsoft中间语言
(IL)
2. CLR将IL编译为特定于平台的本机代码
IL代码在.NET程序集中可用。在运行时,a
Just-In-Time(JIT)编译器编译IL代码并创建
特定于平台的本机代码。
新的CLR和CoreCLR包含名为的JIT编译器
RyuJIT。新的JIT编译器不仅比以前更快
一;它还可以更好地支持编辑和继续功能
使用Visual Studio进行调试。 “编辑并继续”功能启用
您可以在调试时编辑代码,然后继续调试
会话无需停止并重新启动进程。
运行时还包括一个带有类型加载器的类型系统
负责从程序集加载类型。安全架构
用类型系统验证某些类型的系统结构
是允许的 - 例如,继承。
创建类型实例后,实例也需要
破坏和记忆需要回收。另一个特点
runtime是垃圾收集器。垃圾收集器清理干净
来自托管堆的内存不再被引用。
运行时还负责线程化。创建托管
来自C#的线程不一定是来自底层的线程
操作系统。线程由虚拟化和管理
运行。

 

注意


如何从C#创建和管理线程
第21章,“任务和并行编程”,以及第1章
22,“任务同步。”第17章,“管理和
非托管内存,“提供有关垃圾的信息
收集器以及如何清理内存。

 

Windows运行时


从Windows 8开始,Windows操作系统提供
另一个框架:Windows运行时。此运行时使用
Windows Universal Platform和Windows 8的版本1,
Windows 8.1版本2和Windows 10版本3。
与.NET Framework不同,此框架是使用本机创建的
码。当它与.NET应用程序一起使用时,包含的类型和方法
看起来像.NET。借助语言投影,Windows
运行时可以与JavaScript,C ++和.NET语言一起使用,
看起来它是编程环境的原生。方法
在案例敏感性方面不仅表现不同;该
方法和类型也可以根据具体位置而有不同的名称
他们被使用。
Windows运行时提供了一个组织的对象层次结构
以Windows开头的命名空间。看看这些课程,有
.NET类型的重复功能并不是很多;相反,额外的
提供的功能可用于在其上运行的应用程序
通用Windows平台。

 

 

NAMESPACE DESCRIPTION
Windows.ApplicationModel This namespace and its subnamespaces,
such as
Windows.ApplicationModel.Contracts,
define classes to manage the app lifecycle
and communication with other apps.
80
Windows.Data Windows.Data defines subnamespaces to
work with Text, JSON, PDF, and XML
data.
Windows.Devices Geolocation, smartcards, point of service
devices, printers, scanners, and other
devices can be accessed with
subnamespaces of Windows.Devices.
Windows.Foundation Windows.Foundation defines core
functionality. Interfaces for collections are
defined with the namespace
Windows.Foundation.Collections. You will
not find concrete collection classes here.
Instead, interfaces of .NET collection types
map to the Windows Runtime types.
Windows.Media Windows.Media is the root namespace for
playing and capturing video and audio,
accessing playlists, and doing speech
output.
Windows.Networking This is the root namespace for socket
programming, background transfer of
data, and push notifications.
Windows.Security Classes from
Windows.Security.Credentials offer a safe
store for passwords;
Windows.Security.Credentials.UI offers a
picker to get credentials from the user.
Windows.Services.Maps This namespace contains classes for
location services and routing.
Windows.Storage With Windows.Storage and its
subnamespaces, it is possible to access
files and directories as well as use streams
and compression.
Windows.System The Windows.System namespace and its
subnamespaces give information about the
system and the user, but they also offer a
81
Launcher to launch other apps.
Windows.UI.Xaml In this namespace, you can find a ton of
types for the user interface.

 

 

 

设置环境


如果您安装了安装了最新更新的Visual Studio 2017,
您可以立即从CLI工具开始。如从前那样
提到,您可以在没有Visual Studio 2017的情况下设置系统。您
也可以在Linux和OS X上使用大部分样本。要下载
应用程序适用于您的环境,只需访问https://dot.net和
单击“开始”按钮。从那里,您可以下载.NET
适用于Windows,Linux和macOS的SDK。
对于Windows,您可以下载安装SDK的可执行文件。
使用Linux,您需要选择Linux发行版才能获得
相应的命令:
使用Red Hat和CentOS,使用yum安装.NET SDK。
使用Ubuntu和Debian,使用apt-get。
使用Fedora,使用dnf install。
使用SLES / openSUSE,使用zipper安装。
要在Mac上安装.NET SDK,您可以下载.pkg文件。
使用Windows,不同版本的.NET Core运行时以及
NuGet包安装在用户配置文件中。在你工作的时候
在.NET中,此文件夹的大小会增加。随着时间的推移,您创建多个
项目,NuGet包不再存储在项目本身;
它们存储在此特定于用户的文件夹中。这具有以下优点:

 

 

你不需要为每个不同的下载NuGet包
项目。 下载了这个NuGet软件包后,它就在您的软件包上
系统。 就像不同版本的NuGet包以及
运行时可用,所有不同的版本都存储在此中
夹。 有时检查此文件夹可能会很有趣
并删除不再需要的旧版本。
安装.NET Core CLI工具,您可以使用dotnet工具作为条目
指出要启动所有这些工具。 刚开始

> dotnet --help

 

查看可用的dotnet工具的所有不同选项。 很多
选项有简写符号。 如需帮助,您可以输入

> dotnet --h

 

创建应用程序


dotnet工具提供了一种创建“Hello World!”的简便方法。
应用。 只需输入以下命令:
> dotnet新控制台 - 输出HelloWorld
此命令创建一个新的HelloWorld目录并添加源
代码文件Program.cs和项目文件HelloWorld.csproj。 开始
使用.NET Core 2.0,此命令还包括一个dotnet还原
下载所有NuGet包的地方。 要查看列表
您可以使用应用程序使用的依赖项和库版本
检查obj子目录中的文件project.assets.json。没有
使用选项--output(或-o作为速记),文件将是
在当前目录中生成。
生成的源代码类似于以下代码段(代码
文件HelloWorld / Program.cs):

 

using System;
namespace HelloWorld
{
class Program
{static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

自20世纪70年代以来,Brian Kernighan和Dennis Ritchie撰写了这篇文章
预订C编程语言,这是一个传统
使用“Hello World!”应用程序学习编程语言。
使用.NET Core CLI,将自动生成此程序。
让我们进入这个程序的语法。 Main方法是条目
指向.NET应用程序。 CLR调用静态Main方法
启动。 Main方法需要放入一个类中。这里,班级是
命名程序,但您可以通过任何名称来调用它。
Console.WriteLine调用Console类的WriteLine方法。
您可以在System命名空间中找到Console类。你没有
需要编写System.Console.WriteLine来调用此方法;该
打开系统命名空间,使用上面的using声明
源文件。
编写源代码后,需要编译代码才能运行它。
创建的项目配置文件名为HelloWorld.csproj。
与旧的csproj文件相比,新的项目文件减少了一些
具有多个默认值的行:

 

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>

使用项目文件,OutputType定义输出的类型。
使用控制台应用程序,这是Exe。 TargetFramework指定
框架和用于构建应用程序的版本。
使用示例项目,应用程序使用.NET Core 2.0构建。
您可以将此元素更改为TargetFrameworks并指定多个元素
框架,例如netcoreapp2.0; net47,用于构建应用程序
for .NET Framework 4.7和.NET Core 2.0(项目文件
84
的HelloWorld/ HelloWorld.csproj):

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp2.0;net47</TargetFrameworks>
</PropertyGroup>
</Project>

Sdk属性指定项目使用的SDK。
Microsoft提供了两个主要的SDK:用于控制台的Microsoft.NET.Sdk
用于ASP.NET Core Web的应用程序和Microsoft.NET.Sdk.Web
应用。
您不需要将源文件添加到项目中。 带有.cs的文件
同一目录和子目录中的扩展名是自动的
添加了编译。 扩展名为.resx的资源文件是
自动添加以嵌入资源。 你可以改变
默认行为和显式排除/包含文件。
您也不需要添加.NET Core包。 通过指定
目标框架netcoreapp2.0,元数据包
引用许多其他包的Microsoft.NetCore.App是
自动包含。

 

构建应用程序


要构建应用程序,需要将当前目录更改为
应用程序的目录并启动dotnet构建。 当你
编译.NET Core 2.0和.NET Framework 4.7,你会看到输出
如下:

> dotnet build
Microsoft (R) Build Engine version 15.5.179.9764 for .NET
Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 19.8 ms for
C:\procsharp\Intro\HelloWorld\HelloWorld.csproj.
HelloWorld ->
C:\procsharp\Intro\HelloWorld\bin\Debug\net47\HelloWorld.exe
HelloWorld ->
85
C:\procsharp\Intro\HelloWorld\bin\Debug\netcoreapp2.0\HelloWorld.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.58

注意
命令dotnet new和dotnet build现在包括
恢复NuGet包。 您还可以显式恢复NuGet
使用dotnet还原的软件包。

 

由于编译过程,您会发现包含的程序集
程序类的IL代码
bin / debug / [netcoreapp2.0 | net47]文件夹。 如果你比较的构建
使用.NET 4.7的.NET Core,您将找到包含IL代码的DLL
使用.NET Core,以及包含.NET 4.7的IL代码的EXE。
为.NET Core生成的程序集依赖于
System.Console程序集,而.NET 4.6程序集找到
mscorlib程序集中的控制台类。
要构建发布代码,您需要指定选项--Configuration
发布(简写-c发布):

 

> dotnet build --configuration Release

以下章节中的一些代码示例可以使用
C#7.1或C#7.2提供的功能。 默认情况下,最新的主要
使用编译器的版本,即C#7.0。 要启用更新
在C#的版本中,您需要在项目文件中指定它,如图所示
使用以下项目文件部分。 在这里,最新版本
配置了C#编译器。

<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>

 

运行应用程序


要运行该应用程序,可以使用dotnet run命令

> dotnet run

如果项目文件针对多个框架,您需要告诉
dotnet run命令用于运行应用程序的框架
使用选项--framework。 必须配置此框架
csproj文件。 使用示例应用程序,您可以看到类似的输出
恢复信息后的以下内容:

> dotnet run ––framework netcooreapp2.0
Microsoft (R) Build Engine version 15.5.179.9764 for .NET
Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 20.65 ms for
C:\procsharp\Intro\HelloWorld\HelloWorld.csproj.
Hello World!

在生产系统上,您不使用dotnet run来运行
应用。 相反,您使用dotnet与库的名称:

> dotnet bin/debug/netcoreapp2.0/HelloWorld.dll

您还可以创建可执行文件,但可执行文件是平台
具体。 如何完成此操作将在本章的后面部分中显示
“打包和发布应用程序。”

 

注意
正如您所见,构建并运行“Hello World!”应用程序
Windows,dotnet工具在Linux和OS X上的工作方式相同。你
可以在任一平台上使用相同的dotnet命令。
正如Visual Studio 2017所提供的,本书的重点是Windows
一个比可用的更强大的开发平台
其他平台,但本书中的许多代码示例都是基于的
在.NET Core上,您将能够在其他平台上运行它们
运行应用程序
要运行该应用程序,可以使用dotnet run命令

同样。 您还可以使用Visual Studio Code,这是一个免费的开发
环境,直接在Linux和OS X上开发应用程序。
有关详细信息,请参阅本章后面的“开发人员工具”部分
有关Visual Studio的不同版本的信息。


正如您所见,构建并运行“Hello World!”应用程序
Windows,dotnet工具在Linux和OS X上的工作方式相同。你
可以在任一平台上使用相同的dotnet命令。
正如Visual Studio 2017所提供的,本书的重点是Windows
一个比可用的更强大的开发平台
其他平台,但本书中的许多代码示例都是基于的
在.NET Core上,您将能够在其他平台上运行它们
运行应用程序
要运行该应用程序,可以使用dotnet run命令

同样。 您还可以使用Visual Studio Code,这是一个免费的开发
环境,直接在Linux和OS X上开发应用程序。
有关详细信息,请参阅本章后面的“开发人员工具”部分
有关Visual Studio的不同版本的信息。

 

posted @ 2019-01-17 08:29  淘小人  阅读(4155)  评论(0编辑  收藏  举报