im钱包安卓版下载
数字资产服务平台

im钱包安卓版下载是全球著名的数字资产交易平台之一,主要面向全球用户提供比特币、莱特币、以太币等数字资产的币币和衍生品交易服务。

imtoken钱包官网下载2.|dotnet是什么软件

时间:2024-03-09 18:10:57

Dotnet到底是什么技术? - 知乎

Dotnet到底是什么技术? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册.NETdotNET.NET开发Dotnet到底是什么技术?假设一个应聘场景:公司会招收精通c加加,python,java,c#程序员,但是招收dotnet程序员,是在招聘谁?需要该类人会什么?为什么要用平台的…显示全部 ​关注者25被浏览71,386关注问题​写回答​邀请回答​好问题 1​添加评论​分享​6 个回答默认排序Leah​ 关注一、前言中间件(Middleware)最初是一个机械上的概念,说的是两个不同的运动结构中间的连接件。后来这个概念延伸到软件行业,大家把应用操作系统和电脑硬件之间过渡的软件或系统称之为中间件,比方驱动程序,就是一个典型的中间件。再后来,这个概念就泛开了,任何用来连接两个不同系统的东西,都被叫做中间件。所以,中间件只是一个名词,不用太在意,实际代码跟他这个词,也没太大关系。大家能看到这里,已是对我们的支持了。分享一组6月录制的C#零基础教程。我们喜欢做这样的分享,它足够的基础,对新手友好。如果需要的话,就来免费领取吧!快来领取吧资料免费自取:由于内容过多不便呈现,需要视频教程和配套源码的小伙伴,可点击这里,添加我知乎主页个人说明处号码 免费分享也可直接点击下方卡片:点击后可自动复制威芯号,并跳转到威芯。得辛苦大家自行搜索威芯号添加。内容已做打包,添加后直接发送注意查收!中间件技术,早在.Net framework时期就有,只不过,那时候它不是Microsoft官方的东西,是一个叫OWIN的三方框架下的实现。到了.Net core,Microsoft才把中间件完整加到框架里来。感觉上,应该是Core参考了OWIN的中间件技术(猜的,未求证)。在实现方式上,两个框架下的中间件没什么区别。下面,我们用一个实际的例子,来理清这个概念。二、开发环境&基础工程这个Demo的开发环境是:Mac + VS Code + Dotnet Core 3.1.2。$ dotnet --info

.NET Core SDK (reflecting any global.json):

Version: 3.1.201

Commit: b1768b4ae7

Runtime Environment:

OS Name: Mac OS X

OS Version: 10.15

OS Platform: Darwin

RID: osx.10.15-x64

Base Path: /usr/local/share/dotnet/sdk/3.1.201/

Host (useful for support):

Version: 3.1.3

Commit: 4a9f85e9f8

.NET Core SDKs installed:

3.1.201 [/usr/local/share/dotnet/sdk]

.NET Core runtimes installed:

Microsoft.AspNetCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]

Microsoft.NETCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

首先,在这个环境下建立工程:创建Solution% dotnet new sln -o demo

The template "Solution File" was created successfully.

这次,我们用Webapi创建工程% cd demo

% dotnet new webapi -o demo

The template "ASP.NET Core Web API" was created successfully.

Processing post-creation actions...

Running 'dotnet restore' on demo/demo.csproj...

Restore completed in 179.13 ms for demo/demo.csproj.

Restore succeeded.

把工程加到Solution中% dotnet sln add demo/demo.csproj

基础工程搭建完成。三、创建第一个中间件我们先看下Demo项目的Startup.cs文件:namespace demo

{

public class Startup

{

public Startup(IConfiguration configuration)

{

Configuration = configuration;

}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.

public void ConfigureServices(IServiceCollection services)

{

services.AddControllers();

}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>

{

endpoints.MapControllers();

});

}

}

}

这是Startup默认生成后的样子(注意,不同的操作系统下生成的代码会略有不同,但本质上没区别)。其中,Configure是中间件的运行定义,ConfigureServices是中间件的参数设置注入。我们在Configure方法里,加入一个简单的中间件:app.UseAuthorization();

/////////////////////下面是加入的代码

app.Use(async (context, next) =>

{

// your code

await next.Invoke();

// your code

});

/////////////////////////

app.UseEndpoints(endpoints =>

{

endpoints.MapControllers();

});

在这个代码中,app.Use是引入中间件的方式,而真正的中间件,是async (context, next),这是一个delegate方法。中间件方法的两个参数,context是上下文HttpContext,next指向下一个中间件。其中,next参数很重要。中间件采用管道的形式执行。多个中间件,通过next进行调用。四、中间件的短路在前一节,我们看到了中间件的标准形式。有时候,我们希望中间件执行完成后就退出执行,而不进入下一个中间件。这时候,我们可以把await next.Invoke()从代码中去掉。变成下面的形式:app.Use(async (context, next) =>

{

// your code

});

对于这种形式,Microsoft给出了另一个方式的写法:app.Run(async context =>

{

// your code

});

这两种形式,效果完全一样。这种形式,我们称之为短路,就是说在这个中间件执行后,程序即返回数据给客户端,而不执行下面的中间件。五、中间件的映射有时候,我们需要把一个中间件映射到一个Endpoint,用以对外提供简单的API处理。这种时间,我们需要用到映射:app.Map("/apiname", apiname => {

app.Use(async (context, next) =>

{

// your code

await next.Invoke();

});

});

此外,映射支持嵌套:app.Map("/router", router => {

router.Map("/api1name", api1Name => {

app.Use(async (context, next) =>

{

// your code

await next.Invoke();

});

});

router.Map("/api2name", api2Name => {

app.Use(async (context, next) =>

{

// your code

await next.Invoke();

});

});

})

对于这两个嵌套的映射,我们访问的Endpoint分别是/router/api1name和/router/api2name。以上部分,就是中间件的基本内容。但是,这儿有个问题:为什么我们从各处文章里看到的中间件,好像都不是这么写的?嗯,答案其实很简单,我们看到的方式,也都是中间件。只不过,那些代码,是这个中间件的最基本样式的变形。下面,我们就来说说变形。六、变形1: 独立成一个类大多数情况下,我们希望中间件能独立成一个类,方便控制,也方便程序编写。这时候,我们可以这样做:先写一个类:public class TestMiddleware

{

private readonly RequestDelegate _next;

public TestMiddleware(RequestDelegate next)

{

_next = next;

}

public async Task Invoke(HttpContext context)

{

// Your code

await _next.Invoke(context);

}

}

这个类里context和next和上面简单形式下的两个参数,类型和意义是完全一样的。下面,我们把这个类引入到Configure中:app.UseMiddleware();

注意,引入Middleware类,需要用app.UseMiddleware而不是app.Use。app.Use引入的是方法,而app.UseMiddleware引入的是类。就这点区别。如果再想高大上一点,可以做个Extensions:public static class TestMiddlewareExtensions

{

public static IApplicationBuilder UseTestMiddleware(this IApplicationBuilder app)

{

return app.UseMiddleware();

}

}然后,在Configure中,就可以换成:app.UseTestMiddleware();看着高大上了有没有?七、变形2: 简单引入参数有时候,我们需要给在中间件初始化时,给它传递一些参数。看类:public class TestMiddleware

{

private readonly RequestDelegate _next;

private static object _parameter

public TestMiddleware(RequestDelegate next, object parameter)

{

_next = next;

_parameter = parameter;

}

public async Task Invoke(HttpContext context)

{

// Your code

await _next.Invoke(context);

}

}那相应的,我们在Configure中引入时,需要写成:app.UseMiddleware(new object());同理,如果我们用Extensions时:public static class TestMiddlewareExtensions

{

public static IApplicationBuilder UseTestMiddleware(this IApplicationBuilder app, object parameter)

{

return app.UseMiddleware(parameter);

}

}同时,引入变为:app.UseTestMiddleware(new object());八、变形3: 依赖注入参数跟前一节一样,我们需要引入参数。这一节,我们用另一种更优雅的方式:依赖注入参数。先创建一个interface:public interface IParaInterface

{

void someFunction();

}再根据interface创建一个实体类:public class ParaClass : IParaInterface

{

public void someFunction()

{

}

}参数类有了。下面建立中间件:public class TestMiddleware

{

private readonly RequestDelegate _next;

private static IParaInterface _parameter

public TestMiddleware(RequestDelegate next, IParaInterface parameter)

{

_next = next;

_parameter = parameter;

}

public async Task Invoke(HttpContext context)

{

// Your code

// Example: _parameter.someFunction();

await _next.Invoke(context);

}

}因为我们要采用注入而不是传递参数,所以Extensions不需要关心参数:public static class TestMiddlewareExtensions

{

public static IApplicationBuilder UseTestMiddleware(this IApplicationBuilder app)

{

return app.UseMiddleware();

}

}最后一步,我们在Startup的ConfigureServices中加入注入代码:services.AddTransient();完成 !这个方式是Microsoft推荐的方式。我在前文Dotnet core使用JWT认证授权最佳实践中,在介绍JWT配置时,实际使用的也是这种方式。中间件app.UseAuthentication();这是Microsoft已经写好的认证中间件,我们只简单做了引用。注入参数services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

.AddJwtBearer(option =>

{

option.RequireHttpsMetadata = false;

option.SaveToken = true;

var token = Configuration.GetSection("tokenParameter").Get();

option.TokenValidationParameters = new TokenValidationParameters

{

ValidateIssuerSigningKey = true,

IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(token.Secret)),

ValidIssuer = token.Issuer,

ValidateIssuer = true,

ValidateAudience = false,

ClockSkew = TimeSpan.Zero,

};

});这部分代码,是我们注入的参数设置。其中,几个方法又是Microsoft库提供的Builder。Builder是注入参数的另一种变形。我会在关于注入和依赖注入中详细说明。九、中间件的引入次序中间件的引入次序,从代码上来说没有那么严格。就是说,某些类型的中间件交换次序不会有太大问题。一般来说,使用中间件的时候,可以考虑以下规则:实现Endpoint的中间件,应该放在最后,但要放在控制器引入的中间件之前。通常Endpoint中间件提供的是API或类似的内容,它会有Response的返回。而中间件在Response返回后,就不会调用Next了。具有数据过滤内容的中间件,应该往前放,而且有个规则:当有过滤到规则外的情况时,应该越早返回越好。以这两个规则来决定中间件的引入次序,就足够了。文章来源老王Plus。希望对你有用!最后大家如果喜欢我的文章,还麻烦动动小手点个关注。你有任何与 C#/.NET 有关的问题,欢迎在评论区与我沟通,也欢迎大家加入最活跃的编程技术交流群 (.NET/WPF )与国内大部分,优质内容的作者(包括我)直接对线哈。发布于 2022-07-11 11:00​赞同 1​​1 条评论​分享​收藏​喜欢收起​熊起我没有手动删除过自己回答下的回复,都是知乎删的​ 关注推荐一本老书<.net本质论> 门槛不高 内容丰富 对于了解那个年代的编程思想很有帮助..net CLI曾经是一个雄心勃勃的中间语言层计划 给当时常见的范式都用统一的中间指令来表达.微软也以此改造了自己门下的大量语言.虽然结果来说,选择的手段不足以达到预想的目的,但已经是非常接近正确答案的尝试了发布于 2021-02-14 21:59​赞同 3​​添加评论​分享​收藏​喜欢

.NET(免费开源开发平台)_百度百科

(免费开源开发平台)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心.NET是一个多义词,请在下列义项上选择浏览(共2个义项)展开添加义项.NET播报上传视频免费开源开发平台收藏查看我的收藏0有用+10本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。.NET是一种用于构建多种应用的免费开源开发平台,可以使用C#、F#或Visual Basic编写.NET应用。 [10].NET用于生成多种类型的应用程序和库开发Web应用、Web API和微服务、云中的无服务器函数、云原生应用、移动应用、桌面应用、Windows WPF、Windows窗体、通用 Windows平台 (UWP)、游戏、物联网 (IoT)、机器学习、控制台应用、Windows服务。.NET类库在不同应用和应用类型中共享功能,无论构建哪种类型的应用,代码和项目文件看起来都一样,可以访问每个应用的相同运行时、API和语言功能。 [1]软件名称.NET软件平台Windows、Linux、macOS、Docker等 [2]上线时间2000年11月最近更新时间2021年2月9日软件语言C#,F#,VB等开发商Microsoft [2]软件授权MIT和Apache 2许可证 [3]软件版本5.0.6 [4]3.1.15(LTS)2.1.28(LTS)软件大小5.6 至 6.8 MB目录1产生背景2运行环境3应用组件▪客户端应用▪WebServices▪接口规范▪CLR 与 CIL43.0版本5动态编程▪并行计算▪协变和逆变▪默认参数▪.NET控件6加密处理▪安全威胁▪加密前提▪工具概况▪加密/解密▪防止破解产生背景播报编辑.NET是开放源代码(托管于GitHub),使用 MIT 和 Apache 2 许可证。.NET 是 .NET Foundation 的项目。.NET就是微软用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented architecture)和敏捷性的技术。对技术人员,想真正了解什么是.NET,必须先了解.NET技术出现的原因和它想解决的问题,必须先了解为什么他们需要XML,Web Services 和 SOA。技术人员一般将微软看成一个平台厂商。微软搭建技术平台,而技术人员在这个技术平台之上创建应用系统。从这个角度,.NET也可以如下来定义:.NET是微软的新一代技术平台,为敏捷商务构建互联互通的应用系统,这些系统是基于标准的,联通的,适应变化的,稳定的和高性能的。从技术的角度,一个.NET应用是一个运行于.NET Framework之上的应用程序。(更精确的说,一个.NET应用是一个使用.NET Framework类库来编写,并运行于公共语言运行时Common Language Runtime之上的应用程序。)如果一个应用程序跟.NET Framework无关,它就不能叫做.NET程序。比如,仅仅使用了XML并不就是.NET应用,仅仅使用SOAP SDK调用一个Web Service也不是.NET应用。2014年4月的Build开发者大会上,微软宣布开源一批.NET库和相关技术,成立.NET基金会去管理和引导开源组件的开发。微软还将在Apache 2.0许可证下开源Roslyn编译器堆栈,Roslyn是微软所谓的编译器即服务,包含了C#和 Visual Basic.NET 编译器。.NET基金会由来自微软、GitHub和Xamarin的代表组成,Xamarin由GNOME创始人Miguel de Icaza等人创建,开发.NET开源实现。Xamarin向基金会贡献了它的部分库。de Icaza在接受采访时表示,微软已经变了,不仅仅移除了许可证中的限制,而且与Xamarin合作征求设计反馈,在创作共用许可证下发布文档。2014年11月13日,为了进一步扩大云计算市场,微软将不再把.NET和Visual Studio等关键软件技术局限在Windows平台,今后还将兼容Linux、Mac OS X、iOS和Android。除此之外,微软还宣布将开放.NET核心服务器运行环境和框架的源代码,使得外部开发者也可以对这一软件开发平台做出贡献。 [3]作为这一变化的一部分,微软将允许开发者使用.NET运行环境和框架,来为Linux和Mac开发基于服务器和云端的应用。微软还推出了功能齐全的新版Visual Studio 2013,并将免费对独立开发者、学生、小企业等用户开放。 [3]运行环境播报编辑.NET 5 和.NET CORE均支持 Windows, Linux, 和macOS系统。 [5]如图《版本历史及Windows 所安装的版本》所示,汇总了版本历史记录以及标识 Windows 所安装的版本。版本历史及Windows 所安装的版本每个新版本的 .NET Framework 都会保留早期版本中的功能并会添加新功能。 CLR 由其自己的版本号确定的。 某些版本的 .NET Framework 包含新版本的 CLR,而其他版本的 .NET Framework 使用早期版本的 CLR。 例如,.NET Framework 4 包含 CLR 4,而 .NET Framework 3.5 包含 CLR 2.0。 (没有版本 3 的 CLR。)虽然 .NET Framework 4.5 是 .NET Framework 4 的就地更新,基础 CLR 版本号成为 CLR 4.5。通常,您不应卸载计算机上安装 .NET Framework 的任何版本,因为您使用的应用程序可能取决于特定版本,并且可能中断,如果移除该版本。 您可以同时在一台计算机上加载 .NET Framework 的多个版本。 这意味着可以安装 .NET Framework,而无需卸载旧版本。应用组件播报编辑客户端应用组成.net软件技术的组件,组件之一,“智能”客户端应用软件和操作系统,包括PC、PA、手机或其他移动设备通过互联网、借助Web Services技术,用户能够在任何时间、任何地点都可以得到需要的信息和服务。例如:可以在手机上阅读新闻、定购机票、浏览在线相册等等。CRM系统,应用了.NET的解决方案后所有的业务人员便可以通过手机或PDA直接访问客户信息了 [6]。WebServicesWeb Services是智能终端软件的基础,微软为用户创建智能终端提供了一整套丰富的解决方案,包括:.NET Framework- 智能终端实现跨平台(设备无关性)的Visual Studio .NET – 建立并集成Web Services和应用程序的快速开发工具Microsoft Windows Server 2003 – 新一代的企业服务器,用于提供建立和发布各种解决方案Microsoft Office Professional Edition 2003 – 内建的工具集也能帮助开发智能终端.netWeb Services是.NET的核心技术。正如Web是新一代的用户与应用交互的途径,XML是新一代的程序之间通讯的途径一样,Web Services是新一代的计算机与计算机之间一种通用的数据传输格式,可让不同运算系统更容易进行数据交换。Web Services有以下几点特性:Web services允许应用之间共享数据;Web services分散了代码单元;基于XML这种internet数据交换的通用语言,实现了跨平台、跨操作系统、跨语言。那微软的ASP和Web services究竟有什么不同呢,ASP仍然是一个集中式计算模型的产物,只不过是披着一层互联网的外衣。但Web Services却是一个迥然不同的精灵,它秉承“软件就是服务”的真言,同时顺应分布式计算模式的潮流。而它的存在形式又与以往软件不同。这种组件模式,小巧、单一,对于开发人员来讲,开发成本较低。在这里指出Web services不是微软发明的,同样也不属于微软专有。Web services是一个开放的标准,和HTTP、 XML、SOAP一样。他们是一个工业标准而非微软标准,WS-I是为了促进Web Services互通性的联盟组织,最初是由IBM和微软所发起,其它的成员包括BEA System、惠普计算机(HP)、甲骨文(Oracle)、英特尔(Intel)和SUN 计算机(Sun Microsystem)。如今网络上存在的大多Web services其实没有使用.NET构架,Web services具有互操作属性,你同样可以使用Windows开发客户端来调用运行于Linux上面的Web services的方法。接口规范microsoft .net先前提到的接口规范问题,在.NET中,Web service接口通常使用Web Services Description Language (WSDL)描述。WSDL 使用XML来定义这种接口操作标准及输入输出参数,看起来很像COM和CORBA的接口定义语言(IDLS)Interface Definition Languages。接口定义后就必须使用一些协议调用接口,如SOAP协议,SOAP源于一种叫做XML RPC(XML远程进程调用remote procedure calling)的协议,而Java则根据XML-RPC发展了自己的JAX-RPC协议用来调用Web Services。发布和访问Web Services的接口就用到UDDI了,这里我们只需要知道WSDL使用XML定义Web Services接口,通过SOAP访问Web Services,在internet上寻找Web Services使用UDDI就行了。服务器架构——Microsoft Windows Server System Microsoft提供了最佳的服务器构架—Microsoft Windows Server System—便于发布、配置、管理、编排Web Services。为了满足分布式计算的需要微软构造了一系列的服务器系统,这些内建安全技术的系统全部支持XML,这样加速了系统、应用程序以及同样使用Web Services的伙伴应用之间的集成。Microsoft Windows Server System包括:Microsoft Application Center 2000 - 配置和管理Web应用程序Microsoft BizTalk Server 2002 - 建立基于XML的跨应用和组织的商业逻辑visual studio .netMicrosoft Commerce Server 2002 – 能够迅速建立大规模电子商务的解决方案Microsoft Content Management Server 2002 – 管理动态电子商务网站的目录Microsoft Exchange Server 2000 – 用于进行随时随地的通讯协作Microsoft Host Integration Server 2000 – 用于和主机系统之间传输数据Microsoft Internet Security and Acceleration Server 2000 (ISA Server) – internet连接Microsoft Mobile Information Server 2002 – 用于支持手持设备Microsoft Operations Manager 2000 – 描述企业级解决方案的操作管理Microsoft Project Server 2002 - 提供项目管理的最佳方案Microsoft SharePoint Portal Server 2001 – 查询、共享、发布商业信息Microsoft SQL Server 2000 – 企业级数据库Microsoft Visual Studio .NET和Microsoft .NET Framework对于建立,发布并运行Web Services解决方案。微软官方的教程。 [7]CLR 与 CILNET Framework 环境.NET的初级组成是CIL和CLR。CIL是一套运作环境说明,包括一般系统、基础类库和与机器无关的中间代码,全称为通用中间语言(CIL)。CLR则是确认操作密码符合CIL的平台。在CIL执行前,CLR必须将指令及时编译转换成原始机械码。所有CIL(通用中间语言)都可经由.NET自我表述。CLR检查元资料以确保正确的方法被调用。元资料通常是由语言编译器生成的,但开发人员也可以通过使用客户属性创建他们自己的元资料。如果一种语言实现生成了CIL,它也可以通过使用CLR被调用,这样它就可以与任何其他.NET语言生成的资料相交互。CLR也被设计为作业系统无关性。当一个汇编体被载入时,CLR执行各种各样的测试。其中的两个测试是确认与核查。在确认的时候,CLR检查汇编体是否包含有效的元资料和CIL,并且检查内部表的正确性。核查则不那么精确。核查机制检查代码是否会执行一些“不安全”的操作。核查所使用的演算法非常保守,导致有时一些“安全”的代码也通不过核查。不安全的代码只有在汇编体拥有“跳过核查”许可的情况下才会被执行,通常这意味着代码是安装在本机上的。通过.NET,你可以用SOAP和不同的Web services进行交互。3.0版本播报编辑.NET Framework 3.0(曾用名WinFX)是微软为操作系统Windows Vista(旧称“Longhorn”)而特别设计的API。.NET Framework是对.NET架构和Win32 API的扩展。虽然Win32 API仍然存在于Windows Vista中,但是在WinFX中不能通过它直接调用。另外,WinFX将提供给.NET程序员更加简便地方式来调用Windows中的功能.NET Framework 3.0同样能在Windows XP和Windows Server 2003的计算机上运行,这样增加了能够运行.NET Framework 3.0程序的计算机数量。由于向后兼容,能够更加容易将这些技术介绍给开发人员和最终用户。2006年9月1日,微软发布了.NET Framework 3.0的RC版本,开发人员能够无需安装Vista就可以体验这些新的技术。.NET Framework 3.0并没有新版本的CLR,而是在.NET Framework 2.0的基础上增加了几个新的部件,所以并没有任何程序设计语言有新的语法特性,如果要安装.NET Framework 3.0,则必须先安装.NET Framework 2.0,.NET Framework 3.0可以完全向下兼容.NET Framework 2.0。.NET Framework 3.0主要由的四部分组成:WPF(Windows Presentation Foundation),内部代码“Avalon”,是一套基于XAML(eXtensible Application Markup Language)、.NET和矢量图技术的全新的图形界面系统和API,它充分利用了计算机的3D显卡硬件功能和Direct3D技术。WCF(Windows Communication Foundation),内部代码“Indigo”,是一个面向服务的通讯框架,利用它可以实现本地和远程的程序之间的交互。WF(Workflow Foundation)于2005年8月公开,微软提供的工作流引擎,通过它可以实现任务的自动化和事务的集成。InfoCard是一个软件组件的代码,用来安全的保存和使用用户的数字身份,并提供统一的界面来针对特定的事务选择身份,例如登陆一个网站。动态编程播报编辑C#是静态强类型语言。而在很多情况下,提供“动态”行为,是常常发生的事情,例如通过反射在运行时访问.NET类型、调用动态语言对象、访问COM对象等,都无法以静态类型来获取。因此, C# 4.0引入的又一个全新的关键字dynamic,也同时引入了改善静态类型与动态对象的交互能力,这就是动态查找(Dynamic Lookup)例如:public static void Main()

{

dynamic d = GetDynamicObject();

d.MyMethod(22); // 方法调用

d.A = d.B; // 属性赋值

d[“one”] = d[“two”]; //索引器赋值

int i = d + 100; // 运算符调用

string s = d(1,2); // 委托调用

}就像一个object可以代表任何类型,dynamic使得类型决断在运行时进行,方法调用、属性访问、委托调用都可动态分派。同时,动态特性还体现在构建一个动态对象,在C# 4.0实现IDynamicObject接口的类型,可以完全定义动态操作的意义,通过将C#编译器作为运行时组件来完成由静态编译器延迟的操作,例如:dynamic d = new Foo();

string s;

d.MyMethod(s,3,null);在具体执行过程中,C#的运行时绑定器基于运行时信息,通过反射获取d的实际类型Foo,然后在Foo类型上就MyMethod方法进行方法查找和重载解析,并执行调用,这正是动态调用的背后秘密:DLR。在.NET 4.0中将引入重要的底层组件DLR(Dynamic Language Runtime,动态语言运行时),除了实现动态查找的基础支持,DLR也同时作为基础设施为类似于IronRuby、IronPython这样的动态语言提供统一的互操作机制。总而言之,动态编程将为C#在以下领域产生巨大的变革:· Office编程与其他COM交互。·动态语言支持,在C#中消费IronRuby动态语言类型将并非难事,体验动态语言特性指日可待。· 增强反射支持。以调用IronPython为例,我们只需引入IronPython.dll,IronPython.Modules.dll,and Microsoft.Scripting.dll,即可通过创建ScriptRuntime在C#中HostingIronPython环境,进而来操作动态语言的类型信息。ScriptRuntime py = Python.CreateRuntime();dynamic mypy = py.UseFile("myfile .py");Console.WriteLine(mypy.MyMethod("Hello"));虽然从微软当前提供的技术资料和CTP演示中,动态查找还存在或多或少的问题,但是在“动态”大行其道的今天,我们无法回避也必须拥抱这个未来的主角,因为我坚信明天会更好。并行计算并行计算的出现,是计算机科学发展的必然结果,随着计算机硬件的迅猛发展,在多核处理器上工作已经是既存事实,而传统的编程模式必须兼容新的硬件环境才能使计算机性能达到合理的应用效果。用Anders大师的话说:未来5到10年,并行计算将成为主流编程语言不可忽视的方向,而4.0为C#打响了实现并发的第一枪。未来的.NET Framework 4.0中将集成TPL(Task Parallel Library)和PLINQ(Parallel LINQ),这也意味着未来我们可以应用C# 4.0实现并行化应用,在统一的工作调度程序下进行硬件的并行协调,这将大大提高应用程序的性能同时降低现存并发模型的复杂性。那么,我们应该一睹为快应用C#武器来开发并发环境下的超酷感受,在System.Threading.Parallel 静态类提供了三个重要的方法For、Foreach、Invoke可以为我们小试牛刀://应用TPL,执行并行循环任务

Parallel.For(0,10,i =>{DoSomething(i);});在线程争用执行情况下,相同的操作在双核平台下运行,以StopWatch进行精确时间测试,并行环境下的执行时间为 2001ms,而非并行环境下的执行时间为4500ms,并行运算的魅力果然名不虚传。我们再接再厉应用PLINQ执行对于并行运算的查询、排序等,当前PLINQ支持两种方式ParallelEnumerable类和ParallelQuery类,例如:int[] data = new int[] { 0,1,2,3,4,5,6,7,8,9 };

int[] selected = (from x in data.AsParallel()select x + 1).ToArray();更详细的对比示例留待读者在实践中对此进行讨论,并行计算为托管代码在多核环境下的性能优化提供了统一的解决方案,而未来我们会做的更好。备注:实际上,我们可以选择下载安装Microsoft Parallel Extensions to the .NET Framework 3.5June 2008 CTP包,就可以在.NET 3.5环境下体验并行计算的无穷魅力。协变和逆变协变和逆变,是为解决问题而生的。而要理清解决什么样的问题,需要首先从理清几个简单的概念开始。首先我们进行一点操作:Derived d = new Derived();Base b = d;Derived类型继承自Based类型,由Derived引用可以安全的转换为Based引用,而这种转换能力可以无缝的实现在Derived数组和Base数组,例如:Derived[] ds = new Derived[5];Base[] bs = ds;而这种原始转换(由子类转换为父类)方向相同的可变性,被称为协变(covariant);其反向操作则被称为逆变(contravariant)。当同样的情形应用于泛型时,例如:List ds = new List();List bs = ds;类似的操作却是行不通的。所以,这就成为C# 4.0中完善的问题——泛型的协变与逆变:List bs = new List(); List ds = new List();bs = ds; //List;支持对T协变ds = bs; //List;支持对T逆变而在C# 4.0中,伴随着协变与逆变特性的加入,C#引入两个in和out关键字来解决问题。public interface ICovariant {T MyAction();}public interface IContravariant{void MyAction(T arg);}其中,out表示仅能作为返回值的类型参数,而in表示仅能作为参数的类型参数,不过一个接口可以既有out又有in,因此既可以支持协变、支持逆变,也可以同时支持,例如:public interface IBoth{}默认参数命名参数和可选参数是两个比较简单的特性,对于熟悉其他编程语言的开发者来说可选参数并不陌生,为参数提供默认值时就是可选参数:public void MyMethod(int x,int y = 10,int z = 100) {}因此,我们可以通过调用MyMethod(1)、MyMethod(1,2)方式来调用MyMethod方法。而命名参数解决的是传递实参时,避免因为省去默认参数造成的重载问题,例如省去第二个参数y调用时,即可通过声明参数名称的方式来传递:MyMethod(20,z: 200);相当于调用MyMethod(20,10,200),非常类似于Attribute的调用方式。虽然只是小技巧,但也同时改善了方法重载的灵活性和适配性,体现了C#语言日趋完美的发展轨迹。当然,除此之外.NET 4.0还增加了很多值得期待的平台特性,也将为C#编码带来前所未有的新体验。以上相关版权归作者。.NET控件.NET标准控件根据其应用环境分为两类:Windows Form控件:主要用于Windows应用程序的开发。所有的Windows控件都是从Control类中派生来的,该类包含了所有用户界面的Windows Form组件,其中也包括Form类。Control类中包括了很多位所有控件所共享的属性、事件和方法。它包含复选框、文本框、按钮、标签、图像列表等。Web窗体控件:主要用于Web应用程序的开发。它是专门针对Asp.NETWeb窗体设计的服务器控件。Web窗体控件包含在命名空间System.Web.UI.WebControls中,当用户使用Visual Studio创建Web窗体页面时,会自动在后台代码文件中添加引用该命名空间的Using语句。 [8].NET Compact Framework 提供了可以满足大多数设备项目需要的Windows Form控件。若要使用这些控件没有的功能,可以从公共控件派生您自己的自定义控件。可以通过定义从 Control 类或从程序集中的现有 UserControl 继承的公共类型创建自定义控件。最简单的控件自定义是重写公共控件的方法。例如,可以重写 TextBox 控件的 OnKeyPress 继承方法,提供将输入限制为数字字符的代码。如若觉得自定义控件过于浪费时间和复杂,也可以从受信任的来源下载控件,并通过添加引用来导入自定义控件。支持这些自定义的.NET的控件有:ComponentOne Studio,Spread,ActiveReports、MultiRow [9]等。加密处理播报编辑信息安全是计算机应用的首要问题之一,但关于.NET加密功能的范例却少之又少。有鉴于此,本文探讨了在.NET平台下加密/解密文件的一般过程,并提供了一个加密/解密文件的工具。Web服务以不容置疑的态势迅速发展,促使许多单位开始考虑.NET之类的开发平台。但是,出于对安全问题的担心,一些单位总是对采用新技术心存顾虑。好在有许多成熟的安全和网络技术,例如虚拟私有网络(VPN)和防火墙等,能够极大地提高Web服务应用的安全和性能,让开发者拥有选择安全技术的自由,而不是非得使用尚在发展之中的XML安全技术不可。虽然安全是信息系统的首要问题,但有关.NET安全和加密工具的范例却少之又少。看看大多数.NET书籍的目录,找不到任何有关安全的题目,更不用说关于密码系统的探讨了。有鉴于此,本文将介绍如何在VB开发中运用.NET的加密和密钥生成类,提供一个可用来加密和解密文件的工具Cryption。有了这个工具,你就可以在硬盘上保存各种机密文件,例如所有的密码/用户名字信息、收支文件、以及其他想要保密的信息,还可以加密那些通过Internet发送的文件。加密技术的用途非常广泛,你可以进一步定制本文提供的工具满足某些特殊需要,例如增加批处理能力等。安全威胁攻击和泄密是计算机面临的两大安全威胁。攻击可能来自病毒,例如它会删除文件、降低机器运行速度或引发其它安全问题。相比之下,泄密往往要隐蔽得多,它侵害的是你的隐私:未经授权访问硬盘文件,截取通过Internet发送的邮件,等等。泄密还可能伴随着攻击,例如修改机密文件等。针对泄密的最佳防范措施就是加密。有效的加密不仅杜绝了泄密,而且还防范了由泄密引发的攻击。加密技术有时还用于通信过程中的身份验证——如果某个用户知道密码,那么他应该就是那个拥有这一身份的人。然而必须说明的是,没有一种防范泄密的安全技术是绝对坚固的,因为密码有可能被未经授权的人获得。加密前提首先,要想使用.NET的安全功能,就必须用Imports语句引入加密用的包。试验本文涉及的任何代码之前,请在VB代码窗口的顶部加入下列Imports语句:Imports SystemImports System.TextImports System.Security.Cryptography第二,美国政府过去限制某些加密技术出口。虽然这些限制不再有效,.NET框架在Windows的出口版本中禁用了“高级”加密技术。如果你的 Windows不带高级加密能力,可以从微软网站下载更新包:对于Windows 2000,安装Service Pack 2包含的High Encryption Pack;对于NT,安装Service Pack 6a。对于Windows ME、95、98的用户,IE 5.5也包含了High Encryption Pack。工具概况本文提供的工具可用来加密和解密文件,如果你急着给一些文件加密,只需直接启动本文后面提供的工具即可。这个工具提供了一个用来输入文件名字的文本框和一个输入密钥的文本框,通过便捷的用户界面提供加密、解密和密钥生成功能。上方的文本框用来输入待加密/解密文件的名字;下面的文本框用来输入8个字符的密码。执行加密操作之后将生成一个新的文件,这个经过加密的文件和原始文件在同一目录下,文件名字也和原始文件的一样,但加上了“xx”后缀,例如,假设原始文件是MyFile.txt,则加密得到的文件是MyFilexx.txt。加密好之后,原始文件不一定非删除不可,但一般来说最好删除,因为加密的根本目的就是为了隐藏原始文件的数据。如果要从加密后的文件恢复出原始文件,在上面的文本框中输入MyFilexx.txt,然后提供密码,Cryption工具将创建一个与原始文件一样的MyFile.txt文件。也就是说, Cryption把文件名字后面的“xx”看作是要求解密密文的标志。注意:加密文件之后如果忘记了用来加密该文件的密码,再想恢复出原始文件就不可能了。当然,这与密码本身的复杂程度有关,要想保证文件的安全,最好采用较复杂的密码,例如混合运用字母、数字和特殊字符(如“$”符号等)。.NET提供的加密技术不止一种,不过本文讨论的主要是对称加密。对称加密也称为私有密钥加密,它的特点是加密和解密用的是同一个密钥(实际上是同一种算法),解密方和加密方都有责任保障密码的安全(对于公用密钥、不对称加密,密钥一共有两个,其中一个密钥是公开的,这是当前公认最有效的加密技术,但就速度而言要比对称加密算法慢不少)。在正式利用.NET加密类加密文件之前,首先必须从用户提供的密码生成一个密钥。密钥可以利用Hash函数生成,Hash函数把用户的密码字符串转换成一组类似随机数序列的、无意义的数据,这组数据可作为密钥使用,在加密过程中对原始数据进行唯一性变形处理。例如,用密钥加密数据的一种办法是把原始数据的ASCII码加上密钥的ASCII码:密钥:ab = ASCII: 97,98数据:merry = ASCII: 109,101,114,114,121把这组数据的ASCII码加上密钥的ASCII码(必要时重复使用密钥),得到的加密结果是:97 98 97 98 97+109 +101 +114 +114 +121206 199 211 212218对于同样的数据,Hash算法总是生成同样的结果(这就是说,对于同一个密码,同一Hash算法总是生成相同的bit序列)。实际上,在本文提供的代码中,利用.NET的SHA1CryptoServiceProvider类的ComputeHash方法可以验证这一点,例如,对于同一个输入参数 morph,任何时候该方法总是返回下面的结果:124,230,93,253,197,206,136,72。因此,如果有人知道密码以及生成密钥的算法,他也可以轻松地推算出密钥。加密/解密.NET加密技术要求密钥有确定的长度,例如,DES(Data Encryption Standard)函数要求密钥的长度是64位,Rijndael则要求128、192或256位长度的密钥。密钥越长,加密强度越高。对于DES之外的加密算法,查询LegalKeySizes属性即可得到它允许的密钥长度,包括MinSize(支持的最小密钥长度)、MaxSize(最大密钥长度)、 SkipSize(增量)。SkipSize表示密钥最大长度和最小长度之间可用长度的间隔,例如,Rijndael算法的SkipSize值是64位。利用下面的代码可以得到密钥的长度信息:' 创建DES加密对象Dim des As New DESCryptoServiceProvider()Dim fd() As KeySizesfd = des.LegalKeySizes() 'tells us the size(s),in bitsMsgBox("加密类型=" & des.ToString() & Chr(13) & "minsize = " & fd(0).MinSize & Chr(13) & _"maxsize = " & fd(0).MaxSize & Chr(13) & "skipsize = " & fd(0).SkipSize)运行上面的代码,得到的结果是64、64、0。如果把加密对象的声明改成TripleDESCryptoServiceProvider(),得到的结果是128、192、64。说明:DES算法要求输入一个8字节的密码,但实际使用的密钥只有56位(7个字节),每一个字节的最后一位不用(它作为校验位使用,但不用于实际的加密过程)。下面的代码开始生成本文示例程序的密钥:Public Class Form1Inherits System.Windows.Forms.Form' 保存密钥的8字节的数组Private TheKey(7) As Byte' 在向量中放入一些随机数据Private Vector() As Byte = {&H12,&H44,&H16,&HEE,&H88,&H15,&HDD,&H41}首先,代码定义了保存密钥和初始向量(请参见稍后的详细说明)的两个变量。向量的初值这里用随机数据填充,当然,通过密码和Hash算法也可以获得向量的初值。下面的过程从用户输入的密码创建出密钥:Sub CreateKey(ByVal strKey As String)' 保存密钥的字节数组Dim arrByte(7) As ByteDim AscEncod As New ASCIIEncoding()Dim i As Integer = 0AscEncod.GetBytes(strKey,i,strKey.Length,arrByte,i)' 获得密码的Hash值Dim hashSha As New SHA1CryptoServiceProvider()Dim arrHash() As Byte = hashSha.ComputeHash(arrByte)' 将Hash值保存到密钥For i = 0 To 7TheKey(i) = arrHash(i)Next iEnd Sub用户的密码(strKey)传入到CreateKey过程,分解成一组ASCII值保存到一个字节数组。把这个字节数组传递给 SHA1CryptoServiceProvider类的ComputeHash方法,返回一个Hash值。把这个Hash值保存到TheKey数组,供以后的加密/解密过程使用(注意SHA1CryptoServiceProvider实际能够支持160位,但本文示例程序只用到64位)。那么,初始向量究竟起什么作用呢?这个字节数组有8个元素,就象密钥一样,但向量和密钥的作用是不同的,向量用来避免DES之类的算法一个特有的问题。在DES之类的算法中,原始数据被分成8字节一块然后分别处理。DES在加密一块数据时,要用到前一块数据的模式,也就是说,如果改动了原始数据中第一块的某个字符,所有后继的块的内容都将随之改变,从而避免了一系列相连接的块中出现重复块的问题。例如,假设你一时高兴,发了一个邮件,内容只有几个重复的单词“Melanie! Melanie! Melanie! Melanie!”,在密钥和块序列中前一块的共同作用下,加密之后的密文不会出现重复现象。然而,进一步考虑这个加密过程可以发现,如果用同一个密钥加密多个邮件,且邮件开头的问候语都相同,则邮件开头的一部分很容易受到攻击。由于这个原因,我们用初始向量来模拟前一个块。本文加密/解密工具中的下面这段代码示范了如何加密文件:Sub Encrypt(ByVal inName As String,ByVal outName As String )Try' 创建缓冲区Dim storage(4096) As Byte' 已经写入的字节数量Dim totalBytesWritten As Long = 8' 每次写入的字节数量Dim packageSize As Integer' 声明文件流Dim fin As New FileStream(inName,FileMode.Open,FileAccess.Read)Dim fout As New FileStream(outName,FileMode.OpenOrCreate,FileAccess.Write)fout.SetLength(0)'源文件的大小Dim totalFileLength As Long = fin.Length' 创建加密对象Dim des As New DESCryptoServiceProvider()Dim crStream As New CryptoStream(fout,_des.CreateEncryptor(TheKey,Vector),_CryptoStreamMode.Write)' 输出加密后的文件While totalBytesWritten < totalFileLengthpackageSize = fin.Read(storage,0,4096)crStream.Write(storage,0,packageSize)totalBytesWritten = Convert.ToInt32(totalBytesWritten + _packageSize / des.BlockSize * des.BlockSize)End WhilecrStream.Close()Catch e As ExceptionMsgBox(e.Message)End TryEnd Sub注意这段代码创建了三个文件流:fin,表示明文形式的原始文件;fout,加密结果文件;crStream,加密流,用来把DES加密的结果转入输出文件fout。增加一个crStream流的好处是不必把结果保存到临时文件或缓冲区。加密过程与解密过程的唯一重要区别是,执行解密时,我们将使用DESCryptoServiceProvider对象的另一个方法CreateDecryptor,除此之外,两者其余的处理步骤(包括参数,文件流,等等)基本相同。防止破解黑客和密码专家破解加密文件的办法主要有两个,第一是搜索密文是否有重复现象,第二是用暴力破解法获得密钥。首先我们考虑一下初始向量如何防止重复现象,然后再探讨一下防止暴力破解的关键问题。破解密文的第一种方式是搜索样本——特别是重复的样本。人们在写信的时候总是喜欢用同样的文字开头,例如“亲爱的XXX”、“Dear Sir”等,如果多个邮件的开头文字相同且通过同一密钥加密,则每个密文信件的开头也相同。假设Antonio写给Melanie的所有加密信件都有相同的问候语“@4^F (2$@Fx”,解密者就会首先检查开头的几个单词是不是“Dear Melanie”。解密机密文件的一个重要步骤就是猜测文件中应当会出现的几个单词,所以我们不应该给解密者提供这种方便。在本文的示例中,初始向量的内容被附加到文件的开头,从而防止了出现重复现象。只有信件的开头才容易受到此类攻击。计算机的运算速度和精度要远远超过人,特别擅长处理一些重复的任务,例如尝试每一种可能的密钥组合最终破解密钥。DES加密算法本身是不安全的,这种加密算法早在70年代就已经公之于众。而且,破解者如果想要让搜索密钥的过程自动化,同样可以方便地运用.NET的DESCryptoServiceProvider类。对于一个128位、结合运用密钥/初始向量的加密方案,计算机尝试每一种可能的密钥组合要花多少时间?专家们的看法并不一致,有人认为需要数月,也有人认为装有专用硬件的价值6位数的计算机每秒能够验证数十亿个密钥,破解DES密文只需数小时。如果你的机密值得花数月时间去破解,那么最好改用 TripleDES或其他加密算法。从TripleDES的名字也可以猜出,这种加密方式采用三重数据加密标准算法,所以密钥的长度是192位,而不是 64位的DES密钥。记住,在其他条件相同的情况下,密钥越长,安全程度越高。结束语:现在你已经了解了. NET DES加密算法的使用过程,接下去可以研究.NET的其他安全功能,包括极具吸引力的公用密钥加密方案。虽然公用密钥加密方案执行起来速度慢一些,但加密效果一般要比TripleDES好。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

什么是 .NET?一个开放源代码的开发人员平台。

什么是 .NET?一个开放源代码的开发人员平台。

ic_fluent_brand_facebook_48_mono Created with Sketch.

跳转至主内容

Microsoft

.NET

.NET

.NET

主页

为什么选择 .NET?

什么是 .NET?

为什么选择 .NET?

谁在使用 .NET?

功能

Web

Web

ASP.NET Core

Web API

Blazor

MVC

SignalR

微服务

本机桌面和移动设备

本机桌面和移动设备

.NET .NET Multi-Platform App UI

Windows 窗体

Windows Presentation Foundation

Xamarin

语言

语言

C#

F#

Visual Basic

更多

更多

数据

机器学习和人工智能

游戏开发

物联网

升级助手

学习

学习如何编写 C# 代码

初学者视频

体系结构指南

教程、课程等

文档

Web

Web

ASP.NET Core

Web API

Blazor

Razor Pages

MVC

SignalR

本机桌面和移动设备

本机桌面和移动设备

.NET .NET Multi-Platform App UI

Windows 窗体

Windows Presentation Foundation

Xamarin

语言

语言

C#

F#

Visual Basic

更多

更多

.NET

数据

物联网

机器学习

下载

社区

更多

直播电视

所有 Microsoft

Global

Microsoft 安全

Azure

Dynamics 365

Microsoft 365

Microsoft Teams

Windows 365

技术和创新

技术和创新

Microsoft Cloud

AI

Azure Space

混合现实

Microsoft HoloLens

Microsoft Viva

量子计算

可持续发展

工业

工业

教育

汽车

金融服务

政府

医疗保健

制造业

零售业

所有行业

合作伙伴

合作伙伴

查找合作伙伴

成为合作伙伴

合作伙伴网络

查找广告合作伙伴

成为广告合作伙伴

Azure 市场

AppSource

资源

资源

博客

Microsoft Advertising

开发人员中心

文档

活动

许可

Microsoft Learn

Microsoft Research

查看站点地图

搜索

在 Microsoft.com 中搜索

无结果

取消

主页

学习中心

什么是 .NET?

什么是 .NET?

.NET 是由 Microsoft 支持的免费开放源代码应用程序平台。

.NET

.NET 是一个安全、可靠且高性能的应用程序平台。

C# 是 .NET 的编程语言。它是强类型且类型安全的,并集成了并发和自动内存管理。

详细了解 .NET

C#

C# 是一种新式、安全且面向对象的编程语言,既有面向数据的记录等高级功能,也有函数指针等低级功能。

详细了解 C#

跨平台

Android、Apple、Linux 和 Windows 操作系统均支持 .NET。它在多个 Linux 发行版(如 Red Hat Enterprise Linux 和 Ubuntu)中提供。

.NET 包括一组标准库和 API,涵盖集合、网络到机器学习。

NuGet 是 .NET 的包管理器,包含超过 300000 个包。

了解 .NET 标准库

应用程序模型

可以使用 .NET 生成多种类型的应用。为了帮助你更快地生成应用,应用模型基于基础库构建。

Web

为 Windows、Linux、macOS、Docker 构建 Web 应用和服务。

移动

使用单一代码库生成适用于 iOS、Android 和 Windows 等的本机移动应用。

桌面

创建适用于 Windows 和 macOS 的本机应用,或使用 Web 技术生成随时随地运行的应用。

微服务

创建可在 Docker 容器上运行的可独立部署的微服务。

使用现有云服务,或创建和部署自己的云服务。

机器学习

为应用添加视觉算法、语音处理、预测模型等。

游戏开发

为最热门的台式机、手机和控制台开发 2D 和 3D 游戏。

物联网

使用 Raspberry Pi 和其他单板计算机的本机支持创建 IoT 应用。

100,000+

OSS 贡献

3,700+

OSS 公司参与者

活动社区和开放源代码

.NET 为开放源代码,位于 .NET 基金会 下。.NET 基金会为独立组织,旨在促进围绕 .NET 生态系统的开放型开发和协作。

.NET 为开放源代码项目。你可以加入成千上万已参与 .NET 平台的开发人员和公司。

通过 Stack Overflow 上的活跃开发人员社区快速获取问题解答。

加入 .NET 社区

工具

可以在任何操作系统上使用 .NET CLI、Visual Studio、Visual Studio Code 和其他工具生成应用。配置与 GitHub Actions 等服务的持续集成并将部署推送到云的操作非常简单。

了解 .NET 工具

为什么选择 .NET?

了解世界各地不同行业的客户为何依赖 .NET。

为什么选择 .NET?

准备好开始使用了吗?

通过分步教程轻松了解 .NET。

开始

关注我们

English (United States)

Español

日本語

한국어

Português (Brasil)

中文(简体)

深色模式

加利福尼亚州消费者隐私法案(CCPA)选择退出图标

你的隐私选择

加利福尼亚州消费者隐私法案(CCPA)选择退出图标

你的隐私选择

由 .NET 8.0.2 提供支持

联系 Microsoft

支持

隐私和 Cookie

管理 Cookie

使用条款

商标

京ICP备09042378号-6

© Microsoft 2024

Feedback

.NET | 构建。测试。部署。

.NET | 构建。测试。部署。

ic_fluent_brand_facebook_48_mono Created with Sketch.

跳转至主内容

Microsoft

.NET

.NET

.NET

主页

为什么选择 .NET?

什么是 .NET?

为什么选择 .NET?

谁在使用 .NET?

功能

Web

Web

ASP.NET Core

Web API

Blazor

MVC

SignalR

微服务

本机桌面和移动设备

本机桌面和移动设备

.NET .NET Multi-Platform App UI

Windows 窗体

Windows Presentation Foundation

Xamarin

语言

语言

C#

F#

Visual Basic

更多

更多

数据

机器学习和人工智能

游戏开发

物联网

升级助手

学习

学习如何编写 C# 代码

初学者视频

体系结构指南

教程、课程等

文档

Web

Web

ASP.NET Core

Web API

Blazor

Razor Pages

MVC

SignalR

本机桌面和移动设备

本机桌面和移动设备

.NET .NET Multi-Platform App UI

Windows 窗体

Windows Presentation Foundation

Xamarin

语言

语言

C#

F#

Visual Basic

更多

更多

.NET

数据

物联网

机器学习

下载

社区

更多

直播电视

所有 Microsoft

Global

Microsoft 安全

Azure

Dynamics 365

Microsoft 365

Microsoft Teams

Windows 365

技术和创新

技术和创新

Microsoft Cloud

AI

Azure Space

混合现实

Microsoft HoloLens

Microsoft Viva

量子计算

可持续发展

工业

工业

教育

汽车

金融服务

政府

医疗保健

制造业

零售业

所有行业

合作伙伴

合作伙伴

查找合作伙伴

成为合作伙伴

合作伙伴网络

查找广告合作伙伴

成为广告合作伙伴

Azure 市场

AppSource

资源

资源

博客

Microsoft Advertising

开发人员中心

文档

活动

许可

Microsoft Learn

Microsoft Research

查看站点地图

搜索

在 Microsoft.com 中搜索

无结果

取消

构建。测试。部署。

.NET 是免费的、开源的、跨平台的框架,用于构建新式应用和强大的云服务。

下载

开始

Windows、Linux 和 macOS 上均支持

使用 .NET 生成它

Web

为 macOS、Windows、Linux 和 Docker 构建 Web 应用和服务。

移动和桌面

使用单个代码库生成适用于 Windows、macOS、iOS 和 Android 的原生应用。

生成在所有主要云提供程序上运行的可缩放且有弹性的云本机应用。

微服务

创建可在 Docker 容器上运行的可独立部署的微服务。

人工智能和 ML

游戏开发

物联网

移动

桌面

前端 Web

后端 API

数据

免费和开源

.NET 是一个免费的开放源代码项目,它在 GitHub 上开发和维护,而 GitHub 是数百万希望一起创建出色内容的开发人员的家园。

快速和跨平台

根据 TechEmpower,.NET 的执行速度快于任何其他常用框架。可以在多个平台(包括 Windows、Linux 和 macOS)上编写、运行和生成。

新式和高效

.NET 可帮助你构建适用于 Web、移动、桌面、云等的应用。.NET 具有强大的支持生态系统和强大的工具,对于开发人员而言是最高效的平台。

错过了 .NET Conf 2023?

我们的数字活动现已结束,但你可以随时通过我们的点播视频通过社区进行学习、连接和编码。

浏览按需会话

C# 开发工具包

使用 Visual Studio Code 的 C# 开发工具包扩展提升 Linux、macOS 或 Windows 上的 C# 开发。

安装 C# 开发工具包

基础 C# 认证

通过 Microsoft 和 freeCodeCamp 免费获得 C# 认证!

了解详细信息

.NET 播客应用

你是否想看到一个完整的端到端示例应用程序,展示 .NET、ASP.NET Core、Blazor、.NET MAUI、Azure 容器应用、Orleans、Playwright 等?

查看源代码

开始 .NET 学习之旅所需的一切内容

.NET 提供学习资源库。访问 Microsoft Learn 中的视频、教程、代码示例和内容,以帮助你更好地进行构建。

浏览学习门户

.NET 初学者视频

需要 .NET 开发入门指南? 我们为你提供了 .NET 初学者视频。请浏览有关 Web、移动、桌面、C#、机器学习、容器/Docker、数据访问等内容的视频。

浏览初学者视频

Microsoft Learn

探索如何在 Microsoft Learn 上使用 .NET 生成应用。无论你是新人还是经验丰富的专家,Microsoft Learn 的实践方法都会免费帮助你更快、更自信地按自己的节奏实现目标。

开始

LinkedIn Learning

了解作为 .NET 软件开发人员的职业所需的编程技能。体验 .NET 学习课程,这些课程提供了有关利用 .NET 的核心技术的多个视角。

浏览课程

NuGet

Build with the most secure package ecosystem trusted by millions of developers. With over 390,000 unique packages to date and 50,000 more each year.

浏览 NuGet 库

Visual Studio

使用适用于 .NET 开发人员的最佳 IDE 进行开发。打包了一系列工具和功能,可用于提升和增强软件开发的每个阶段。

了解 Visual Studio 系列

Azure

在专为 .NET 设计的云平台上创建新式且可缩放的云应用。

浏览 Azure 资源和工具

成为全球 .NET 开发者社区的一员

加入由使用 .NET 进行构建的全球开发人员组成的大型参与式社区。一起共享、展示和解决问题。保持连接。

建立连接

474K+

GitHub 上的星级

330K+

X 上的关注者

329K+

Meetup 上的成员

谁在使用 .NET?

全球顶级组织由 .NET 提供支持,并信任 Microsoft 能够让 .NET 成为行业中面向其业务关键型软件的最佳选择。像你一样出色的开发人员已使用 .NET 为遍布各个行业的全球数百万家公司构建了令人惊叹的软件。

阅读客户案例

准备好开始使用了吗?

通过分步教程轻松了解 .NET。

开始

关注我们

English (United States)

Español

日本語

한국어

Português (Brasil)

中文(简体)

深色模式

加利福尼亚州消费者隐私法案(CCPA)选择退出图标

你的隐私选择

加利福尼亚州消费者隐私法案(CCPA)选择退出图标

你的隐私选择

由 .NET 8.0.2 提供支持

联系 Microsoft

支持

隐私和 Cookie

管理 Cookie

使用条款

商标

京ICP备09042378号-6

© Microsoft 2024

Feedback

.NET 简介 - .NET | Microsoft Learn

.NET 简介 - .NET | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

.NET 简介

项目

02/01/2024

20 个参与者

反馈

本文内容

.NET 是一个免费的跨平台开放源代码开发人员平台,用于生成多种类型的应用程序。 .NET 可以运行使用多种语言编写的程序,其中 C# 是最常用的语言。 .NET 依赖于许多大规模应用在生产中使用的高性能运行时。

若要了解如何下载 .NET 并开始编写第一个应用,请参阅入门指南。

.NET 平台专为实现高效工作、性能、安全性和可靠性而设计。 它通过垃圾回收器 (GC) 提供自动内存管理。 由于使用了 GC 和严格的语言编译器,.NET 的类型安全且内存安全。 它通过 async/await 和 Task 基元实现并发。 .NET 包含大量库,这些库具有广泛的功能,并针对多个操作系统和芯片体系结构的性能进行了优化。

.NET 具有以下设计亮点:

生产力是全栈的,包括运行时、库、语言和工具,这些都有助于改进开发人员的用户体验。

“安全代码”是主要的计算模型,而“不安全代码”可实现额外的手动优化。

支持静态代码和动态代码,可实现各种不同场景。

本机代码互操作和硬件内部函数成本低且保真度高(原始 API 和指令访问)。

代码可跨平台(OS 和芯片架构)移植,而平台目标则可以实现专业化和优化。

借助通用编程模型的专用实现,可以实现跨编程领域(云、客户端、游戏)的适应性。

OpenTelemetry 和 gRPC 等行业标准比定制解决方案更受青睐。

.NET 由 Microsoft 和社区维护。 它定期更新,以确保用户将安全可靠的应用程序部署到生产中。

组件

.NET 包括以下组件:

运行时 -- 执行应用程序代码。

库 -- 提供实用工具功能,如 JSON 分析。

编译器 -- 将 C#(和其他语言)源代码编译为(运行时)可执行代码。

SDK 和其他工具 -- 支持使用新式工作流生成和监视应用。

应用堆栈 -- 例如 ASP.NET Core 和 Windows 窗体,支持编写应用。

运行时、库和语言是 .NET 堆栈的重要组成部分。 高级组件(例如 .NET 工具)和应用堆栈(例如 ASP.NET Core)基于这些重要部分生成。 C# 是 .NET 的主要编程语言,.NET 的大部分内容都是用 C# 编写的。

C# 面向对象,运行时支持对象方向。 C# 需要垃圾回收,而运行时提供跟踪垃圾回收器。 库(以及应用堆栈)将这些功能塑造成概念和对象模型,使开发人员能够在直观的工作流中高效编写算法。

核心库公开了数千种类型,其中许多类型与 C# 语言集成并为 C# 语言提供支持。 例如,C# 的 foreach 语句用于枚举任意集合。 基于模式的优化使 List 等集合能够简单高效地处理。 可以将资源管理留给垃圾回收,但可以通过 IDisposable 和 using 语句中的直接语言支持根据提示进行清理。

支持同时执行多项操对于几乎所有工作负载至关重要。 这些操作可能是在保持 UI 响应的同时执行后台处理的客户端应用程序、处理数千个同时请求的服务、响应大量同时刺激的设备,或者并行处理计算密集型操作的高性能计算机。 异步编程支持是 C# 编程语言的一流功能,它提供 async 和 await 关键字,可以轻松编写和组合异步操作,同时仍然体验该语言提供的所有控制流构造的全部好处。

类型系统提供重要的广度,在某种程度上同样迎合了安全性、描述性、动态性和本机互操作性。 首先,类型系统支持面向对象的编程模型。 它包括类型、(单基类)继承、接口(包括默认方法实现)和虚拟方法调度,为面向对象允许的所有类型分层提供合理的行为。 泛型类型是一种普遍功能,可用于将类专用于一个或多个类型。

.NET 运行时通过垃圾回收器提供自动内存管理。 对于任何语言,其内存管理模型可能是其最具决定性的特征。 这适用于 .NET 语言。 .NET 具有一个自我调整的跟踪 GC。 它用于在一般情况下提供“不动手”操作,同时为更极端的工作负载提供配置选项。 当前的 GC 是多年投资和从大量工作负载中学习的结果。

与 .NET 的 GC 托管的类型相比,值类型和堆栈分配的内存块提供了对数据和本机平台互操作更直接、低级别的控制。 .NET 中的大多数基元类型(例如整数类型)都是值类型,用户可以使用类似的语义定义自己的类型。 .NET 的泛型系统完全支持值类型,这意味着 List 这样的泛型类型可以提供值类型集合的平面无开销内存表示。

反射是一种“程序即数据”范例,使程序的一个部分根据程序集、类型和成员动态查询和调用另一个部分。 这对于后期绑定编程模型和工具非常有用。

异常是 .NET 中的主要错误处理模型。 异常的优势在于,错误信息不需要在方法签名中表示,也不需要由每个方法处理。 正确的异常处理对于应用程序的可靠性至关重要。 为了防止应用崩溃,可以有意处理代码中的预期异常。 崩溃的应用比具有未定义行为的应用更可靠且可诊断。

应用堆栈(例如 ASP.NET Core 和 Windows 窗体)生成并利用低级库、语言和运行时。 应用堆栈定义了应用的构造方式及其执行生命周期。

SDK 和其他工具可在开发人员桌面上和持续集成 (CI) 中带来新式开发人员体验。 新式开发人员体验包括能够生成、分析和测试代码。 .NET 项目通常可以通过单个 dotnet build 命令生成,该命令可协调还原 NuGet 包并生成依赖项。

NuGet 是适用于 .NET 的包管理器。 其中包含数十万个包,这些包可实现多种场景的功能。 大多数应用依赖于 NuGet 包来实现某些功能。 NuGet 库由 Microsoft 维护。

免费且开源

.NET 是免费的开放源代码,并且是一个 .NET 基金会项目。 .NET 由 Microsoft 和 GitHub 上的社区在几个存储库中维护。

.NET 源和二进制文件获得了 MIT 许可证许可。 附加许可证适用于 Windows。

支持

.NET 受到多个组织的支持,这些组织致力于确保 .NET 可以在多个操作系统上运行并保持最新版本。 它可以在 Arm64、x64 和 x86 体系结构上使用。

根据我们的版本和支持政策,.NET 的新版本在每年 11 月发布。 它每月在星期二补丁日(第二个星期二)进行更新,通常是太平洋时间上午 10 点。

.NET 生态系统

.NET 有多个变体,每个变体都支持不同类型的应用。 有多个变体的原因一部分是历史信息相关、一部分是技术相关。

.NET 实现:

.NET Framework -- 原始 .NET。 它提供对 Windows 和 Windows Server 的广泛功能的访问权限。 在维护方面它得到了积极的支持。

Mono -- 原始社区和开放源代码 .NET。 一个跨平台 .NET Framework 实现。 积极支持 Android、iOS 和 WebAssembly。

.NET (Core) -- 新式 .NET。 .NET 的一个跨平台开放源代码实现,已针对云时代进行了反思,同时与 .NET Framework 保持极大的兼容。 积极支持 Linux、macOS 和 Windows。

后续步骤

选择 .NET 教程

在浏览器中试用 .NET

C# 导览

F# 导览

在 GitHub 上与我们协作

可以在 GitHub 上找到此内容的源,还可以在其中创建和查看问题和拉取请求。 有关详细信息,请参阅参与者指南。

.NET

提出文档问题

提供产品反馈

反馈

Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

提交和查看相关反馈

此产品

此页面

查看所有页面反馈

其他资源

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

其他资源

本文内容

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

一文搞清到底什么是 .NET? - 知乎

一文搞清到底什么是 .NET? - 知乎切换模式写文章登录/注册一文搞清到底什么是 .NET?dotnet编程大全专注C#wpf开发,dotnet编程大全现在各种 .NET 满天飞,别说新手了,连我这样的老手都差点被绕进去。到底什么是 .NET 呢?《通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?》这篇文章好长呀,不知道你看完了没有,其实最关键的是核心的几个概念,我们从头梳理一下自然就清楚了。.NET Framework 时代远在 2000 年的时候,微软就发布了 .NET 1.0。然后在 2001 年的时候就成为了国际标准。标准是需要实现的,微软对这个标准的第一个实现就是 .NET Framework,也是多年来我们所熟悉的 .NET。但是,这个 .NET 的实现是基于 Windows 平台的,其中包含了大量基于 Windows 的实现,甚至许多 Windows 专有的内容,比如 GDI 支持等等。微软从前推广的 .NET 跨平台,其实,是在微软平台上的跨平台。由于 .NET Framework 是直接基于 Windows 平台的,所以,.NET Framework 的程序是不能真正跨平台的,比如运行在 Linux 上。多样化的 .NET 实现.NET 确实是一个非常优秀的设计,它吸引了大量的开发者,所以,世界上还存在着许多其它的 .NET 实现。他们自己开发了基于 .NET 标准的其它实现,例如,非常著名的 Mono 就是一个由 Xamarin 公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。但是,包括微软自己的 .NET Framework 在内的各种 .NET 实现,看起来都是 .NET,甚至都可以使用 C# 来开发程序,都是面向对象的,其实是各不兼容的,比如它们的底层所支持的 API 就各不相同。这导致的结果就是,你在各个平台上开发的程序集其实是无法通用的。因为对于某个 API 来说,有的平台支持,有的平台就不支持。虽然开发人员可以通过条件编译等手段来开发可以支持在各种 .NET 实现上通用的类库,显然这是一个艰巨的任务,你必须要清楚各个实现的各个版本到底支持了哪些 API。.NET Standard 和 .NET Core到 2014 年的时候,微软的策略转向了开源和跨平台,.NET Framework 显然无法做到这一点,.NET Core 横空出世,它是开源,完全跨平台的 .NET 实现,也是微软的第二个主要 .NET 实现。现在问题来了,即使对于微软来说,现在都有了两个主要的 .NET 实现了,到底哪个是正宗的 .NET 的呢?计算机领域有个概念,如果你不能统一它,就增加一个抽象层。微软又搞出一个 .NET Standard 的新概念。顾名思义,.NET Standard 就是 .NET 的标准,它是一组规范,定义了在 .NET 的实现中到底应该包括哪些 API ,你可以在这里查看这个标准的官方说明。其中的要点如下:为所有的 .NET 实现定义一组统一的基础类库支持的 API使得开发人员能够基于这个标准开发可以在各种 .NET 中使用的可移植库它的好处在于,开发人员不用再逐个平台的检查是否支持某个 API 了,只要看这个平台支持到了 .NET Standard 的哪个版本就行了,只要目标平台支持某个 .NET Standard ,就可以确认你的类库可以跨 .NET 实现通用了。越高的 .NET Standard 版本包含的 API 越多,但通用性越差,因为不是所有的平台都支持这么多的 API,显然,越低的 .NET Standard 兼容性越好,因为它要求的 API 越少,所以,支持的平台也越多。对于开发人员来说,有了这个 .NET Standard,开发通用的类库自然简单多了。微软给出了一个各个常见平台各个版本所支持的 .NET Standard 标准的列表。.NET Core 与 .NET Framework 的选择.NET Framework 和 .NET Core 都是 .NET,只不过它们支持的 API 并不完全一致。开发人员更加头疼了,都是微软的亲儿子,我们应该选哪个呢?从支持程度来看,微软主要在推广 .NET Core,以支持跨平台应用,对 .NET Framework 的支持倒在其次。.NET Core 从 2.0 开始追上 .NET Framework 的 API 数量,达到支持 .NET Standard 2.0 水平,更新速度明显快于 .NET Framework。刚刚发布的 .NET Core 2.1 中支持了 Span,这个特性到明年的 .NET Framework 4.8 都不会支持。所以,新应用的开发应该首选 .NET Core。不过,有一个问题你不得不考虑一下,.NET Core 是跨平台的,必须支持所有平台,因此,它不可能包含 Windows 特定的一些 API,比如注册表的访问,所以。理论上讲,如果你希望在开发中使用一些 Windows 平台专员的 API,它是不会出现在 .NET Core 中的。别担心,微软在 .NET 2.0 开始,微软提供了 Microsoft.Windows.Compatibility 来解决这个问题,该包提供了额外的约 20000 API 以支持 Windows 平台。可以在 .NET Core 项目中,添加对这个包的引用。Windows 兼容性包通过 NuGet 包 Microsoft.Windows.Compatibility 提供,可从面向 .NET Core 或 .NET Standard 的项目引用。它提供了约 20,000 个 API 以支持原来在 .NET Framework 中支持,但是在 .NET Standard 中没有的 API。对于 NuGet 库中的包来说,在发布于 2017/8/14 的 Announcing .NET Core 2.0 中,已经达到了约 70% 的支持度。总结对于 .NET 来说,首先要认识到 .NET Standard 是 .NET 的标准,这个标准有自己版本号,目前的版本是 2.0。在这个 .NET Standard 标准之下,有许多 .NET 的实现,比较著名的就是 .NET Framework 和 .NET Core 了,它们各自有各自的实现版本,目前 .NET Framewrok 是 4.7.2,而 .NET Core 则是 2.1。查看这里的说明(https://www.microsoft.com/net/download/windows)。API 最丰富的就是 .NET Framework 了,不过它仅支持 Windwos 平台。.NET Core 的 2.1 版本,加上 Microsoft.Windows.Compatibility 这个包,已经很接近 .NET Framework 的支持水平,NuGet 中的类库也已经绝大多数支持了 .NET Core, 微软还在疯狂的填补这个差距。如果是新的项目,强烈建议基于 .NET Core 开发当前使用 Visual Studio 和 Visual Studio Code 都可以开发 .NET Core 应用一图胜千言发布于 2023-03-07 12:45・IP 属地北京.NETC#微软(Microsoft)​赞同 12​​2 条评论​分享​喜欢​收藏​申请

.NET 入门教程 - .NET | Microsoft Learn

.NET 入门教程 - .NET | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

.NET 入门教程

项目

09/09/2023

11 个参与者

反馈

本文内容

以下分布教程会在 Windows、Linux 或 macOS 上运行,除非有特别说明。

创建应用的教程

创建控制台应用

使用 Visual Studio Code

使用 Visual Studio (Windows)

创建 Web 应用

使用服务器端 Web UI

使用客户端 Web UI

创建 Web API

创建远程过程调用 Web 应用

创建实时 Web 应用

在云中创建无服务器函数

创建适用于 Android 和 iOS 的移动应用 (Windows)

创建 Windows 桌面应用

WPF

Windows 窗体

通用 Windows 平台 (UWP)

使用 Unity 创建游戏

创建 Windows 服务

类库创建教程

创建类库

使用 Visual Studio Code

使用 Visual Studio (Windows)

.NET 语言学习资源

C# 入门

F# 入门

Visual Basic 入门

其他入门资源

以下资源适用于 .NET 应用开发入门,但不是分步教程:

物联网 (IoT)

机器学习

后续步骤

若要详细了解 .NET,请参阅 .NET 简介。

在 GitHub 上与我们协作

可以在 GitHub 上找到此内容的源,还可以在其中创建和查看问题和拉取请求。 有关详细信息,请参阅参与者指南。

.NET

提出文档问题

提供产品反馈

反馈

Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

提交和查看相关反馈

此产品

此页面

查看所有页面反馈

其他资源

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

其他资源

本文内容

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

.NET SDK 概述 - .NET | Microsoft Learn

.NET SDK 概述 - .NET | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

什么是 .NET SDK?

项目

12/22/2023

12 个参与者

反馈

本文内容

.NET SDK 是一组库和工具,开发人员可使用它创建 .NET 应用程序和库。 它包含以下用于构建和运行应用程序的组件:

.NET CLI。

.NET 运行时和库。

dotnetdotnet。

如何安装 .NET SDK

与任何工具一样,首先应将工具安装到计算机上。 根据场景,可以使用以下某个方法安装 SDK:

使用本机安装程序。

使用安装 shell 脚本。

本机安装程序主要用于开发计算机。 SDK 通过每个受支持平台的本机安装机制进行分发,例如 Ubuntu 上的 DEB 包或 Windows 上的 MSI 程序包。 这些安装程序将根据需要为用户安装并设置环境,以便在安装完成后可立即使用 SDK。 但是,这些安装程序也需要对计算机的管理权限。 可以在 .NET 下载页面上找到要安装的 SDK。

另一方面,安装脚本不需要使用管理权限。 但是,它们也不会在计算机上安装任何系统必备组件;需要手动安装所有系统必备组件。 这些脚本主要用于设置生成服务器或希望在没有管理权限时安装该工具的情况。 可以在安装脚本引用一文中找到详细信息。 有关在 CI 生成服务器上设置 SDK 的信息,请参阅在持续集成 (CI) 环境中使用 .NET SDK。

默认情况下,SDK 以“并排”(SxS) 方式安装,这意味着多个版本可以在一台计算机上共存。 有关如何在运行 CLI 命令时选取版本的信息,请参阅选择要使用的 .NET 版本。

安全指南

重要事项

.NET SDK 查找并执行作为 SDK 中单独的可执行二进制文件交付的各种工具。 在大多数情况下,SDK 能够确定可执行文件的完整路径。 但也有例外情况,SDK 无法确定路径,只能依靠用户输入。 用户可能会提供导致 .NET SDK 执行恶意软件的输入。 因此,不应信任与 SDK 安装位置中特定文件名匹配的二进制文件的任何存储库,例如 msbuild.exe。 SDK 安装在 Windows 上的 C:\Program Files\dotnet\sdk\7.0.400\ 或 Linux 上的 /usr/bin/share/dotnet/sdk/7.0.400 等版本控制文件夹。

请参阅

.NET 下载

.NET CLI 概述

.NET 版本控制概述

如何删除 .NET 运行时和 SDK

选择要使用的 .NET 版本

在 GitHub 上与我们协作

可以在 GitHub 上找到此内容的源,还可以在其中创建和查看问题和拉取请求。 有关详细信息,请参阅参与者指南。

.NET

提出文档问题

提供产品反馈

反馈

Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

提交和查看相关反馈

此产品

此页面

查看所有页面反馈

其他资源

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

其他资源

本文内容

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

.NET 文档 | Microsoft Learn

.NET 文档 | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

.NET 文档

了解如何使用 .NET 在任何使用 C#、F# 和 Visual Basic 的平台上创建应用程序。 浏览 API 引用、代码示例、教程以及其他内容。

下载

下载 .NET

培训

使用 C# 生成 .NET 应用

培训

创建自己的第一个 Web 应用

开始使用

C# 交互式简介

体系结构

.NET 体系结构文档

概述

面向 .NET 开发人员的 Azure

概述

.NET Aspire(预览版)

新变化

.NET 中的新增功能

.NET:可用。 跨平台。 开放源代码。

用于构建所有应用(Web 应用、移动应用、桌面应用、游戏、IoT 等)的开发人员平台。 在 Windows、Linux 和 macOS 上受支持。

开放源代码 .NET

.NET 概述

.NET 教程

.NET 8 的新增功能

.NET Foundation

.NET 开发人员社区

社区工具包

.NET 概念

什么是 .NET?

.NET 基础知识

.NET 实现

.NET Framework(适用于 Windows)

.NET Standard

.NET 问答

.NET 技术社区论坛

.NET 中的安全性

开发 .NET 应用

创建适用于 Windows 的 .NET 桌面应用

使用 ASP.NET Core 创建 Web 应用

使用 Orleans 生成云原生 .NET 应用

使用 .NET Aspire 生成云原生应用

使用 Docker 对 .NET 应用进行容器化

.NET 工具和诊断

.NET SDK 概述

.NET CLI 概述

MSBuild 属性引用

全局和本地工具

诊断工具

代码分析

包验证

迁移和升级

从 .NET Framework 移植到 .NET

.NET 中断性变更

下载 .NET

DevOps 和测试

部署 .NET 应用

单元测试 .NET 应用

GitHub Actions 和 .NET

.NET 中的数据访问

LINQ 概述

Entity Framework Core

Azure 存储

XML 数据

高级 .NET 编程

异步编程模式概述

线程概述

并行编程概述

本机互操作性

垃圾回收

编程语言

使用最喜爱的语言编写应用

使用 C#、F# 或 Visual Basic 编写 .NET 应用

面向对象的新式类型安全语言

简洁、可靠且性能出色的代码的简单语言

具有可读语法的易学语言

创建应用程序

你可以选择 Web 应用、移动应用、桌面应用、游戏、IoT 等。

Web

ASP.NET Core 教程

什么是 ASP.NET Core?

Visual Studio 中的 ASP.NET Core

Windows 容器中的 ASP.NET MVC 应用

Blazor:带 .NET 的交互式客户端 Web UI

适用于 Web 开发的 F#

移动

.NET 多平台应用 UI (MAUI)

Xamarin.Forms

Xamarin.iOS

Xamarin.Android

使用 Azure 开发 Xamarin 应用

桌面

通用 Windows 应用

Windows Presentation Foundation(.NET 5 及更高版本)

Windows Presentation Foundation (.NET Framework)

Windows 窗体(.NET 5 及更高版本)

Windows 窗体 (.NET Framework)

.NET 多平台应用 UI (MAUI)

Xamarin for macOS

微服务

适用于 .NET 开发人员的 Dapr

云原生 .NET 应用

使用 Azure 的无服务器应用

适用于容器化 .NET 应用的体系结构

将辅助角色服务部署到 Azure

面向 .NET 开发人员的 Azure

.NET Aspire(预览版)

迁移本地 .NET Web 应用或服务

适用于 .NET 开发人员的 Azure 服务

用于 .NET 的 Azure SDK

使用 F# 部署 Azure 资源

机器学习和 AI

通过 ML.NET 生成自定义 AI 解决方案

Azure 认知服务

Azure 机器学习

适用于机器学习的 F#

游戏开发

利用 Visual Studio 开发游戏

了解如何使用 CRYENGINE 和 C# 开发游戏

使用 MonoGame 库和 C# 开发游戏

了解如何使用 Unity 和 C# 开发 2D 和 3D 游戏

物联网 (IoT)

.NET IoT 库

5 分钟入门

闪烁 LED

.NET IoT 101 视频系列

API 和语言参考

搜索 .NET API 和语言参考文档。

.NET API 参考

.NET 的 API 参考文档

.NET Framework API 参考

.NET Framework 的 API 参考文档

ASP.NET Core API 参考

ASP.NET Core 的 API 参考文档

ML.NET API 引用

ML.NET 的 API 参考文档

.NET 平台扩展 API 参考

.NET 平台扩展的 API 参考文档

C# 语言参考

C# 语言参考和规范

F# 语言参考

F# 语言参考

Visual Basic 语言参考

Visual Basic 语言参考和规范

是否有兴趣参与撰写 .NET 文档? 有关详细信息,请参阅参与者指南。

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

.NET 入门 - .NET | Microsoft Learn

.NET 入门 - .NET | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

.NET 入门

项目

05/10/2023

17 个参与者

反馈

本文内容

本文介绍如何使用 .NET 创建和运行“Hello World!”应用。

创建应用程序

首先,在计算机上下载并安装 .NET SDK。

然后,打开某一终端,如 PowerShell、命令提示符或 Bash 。

键入以下命令:

dotnet new console -o sample1

cd sample1

dotnet run

应会看到以下输出:

Hello World!

祝贺你! 你现已创建了一个简单的 .NET 应用程序。

后续步骤

按照分步教程或观看 YouTube 上的 .NET 101 视频,开始开发 .NET 应用程序。

在 GitHub 上与我们协作

可以在 GitHub 上找到此内容的源,还可以在其中创建和查看问题和拉取请求。 有关详细信息,请参阅参与者指南。

.NET

提出文档问题

提供产品反馈

反馈

Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

提交和查看相关反馈

此产品

此页面

查看所有页面反馈

其他资源

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

其他资源

本文内容

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024