.NET 6 即将到来的新特性  隐式命名空间引用

目录
  • 1、Sample
  • 2、How it works
  • 3、More

前言:

今天看到一个更新,可以不需要写 using了,目前还没有正式发布,应该要到 .NET 6 Preview 7 才会支持。

1、Sample

我们以 Minimal API 为例子

示例:

using Microsoft.AspNetCore.Builder;

var app = WebApplication.Create(args);
app.Map("/", () => "Hello World");
app.Run();

或者结合 global using 之后把 using 放在一个单独的 Imports 文件中,

Imports:

@global using Microsoft.AspNetCore.Builder;

Program:

var app = WebApplication.Create(args);
app.Map("/", () => "Hello World");
app.Run();

在 .NET 6 Preview 7 中,我们将不需要再加 using 了,Preview 7 会包含一个新的特性——“隐式命名空间引用”,这个特性将会默认为你的项目添加常用的命名空间,我们就可以不再需要上面的 Imports

2、How it works

它的实现方式也是基于之前的 global using 特性来实现的,编译器会根据 MS Build 中配置的命名空间生成一个 global using 的文件,就像上面的 Imports

目前针对不同的 SDK 类型会添加不同的默认 namespace,目前已有的如下:

针对 Microsoft.NET.Sdk,默认的命名空间如下:

System
System.Collections.Generic
System.IO
System.Linq
System.Net.Http
System.Threading
System.Threading.Tasks

针对 Microsoft.NET.Sdk.Web

System.Net.Http.Json
Microsoft.AspNetCore.Builder
Microsoft.AspNetCore.Hosting
Microsoft.AspNetCore.Http
Microsoft.AspNetCore.Routing
Microsoft.Extensions.Configuration
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting
Microsoft.Extensions.Logging

针对 Microsoft.NET.Sdk.Worker

Microsoft.Extensions.Configuration
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting
Microsoft.Extensions.Logging

如果你想禁用隐式命名空间引用,可以通过 DisableImplicitNamespaceImports 来完全禁用这个功能

<DisableImplicitNamespaceImports>true</DisableImplicitNamespaceImports>

如果你只是想禁用针对 Microsoft.NET.Sdk.Web 的引用则可以配置 DisableImplicitNamespaceImports_Web

<DisableImplicitNamespaceImports_Web>true</DisableImplicitNamespaceImports_Web>

配置对应关系:

SDK PropertyName
Microsoft.NET.Sdk DisableImplicitNamespaceImports_DotNet
Microsoft.NET.Sdk.Web DisableImplicitNamespaceImports_Web
Microsoft.NET.Sdk.Worker DisableImplicitNamespaceImports_Worker

后面应该会有更多的支持,具体还是要以最终 .NET6 正式发布时为准

我们也可以为我们的 library 启用 global using 的功能,这样在使用的时候也可以不加 using 直接使用

只需要打包的时候在项目文件中增加一个类似下面的 property 到项目里即可

<Project>
  <ItemGroup>
    <GlobalUsings Include="Library" />
  </ItemGroup>
</Project>

3、More

隐式命名空间引用能够使得我们避免写特别多重复的命名空间引用,对于简单的测试应用来说会非常的方便

虽然隐式的命名空间引用能够为我们大大简化代码,不需要再写重复的 using 代码,但是也有可能会对代码造成冲突,比如自己定义的一个类,在自己的命名空间下和默认隐式引用的命名空间下都存在,此时就会造成冲突,如果不能移除默认的命名空间引用,那使用的时候就需要使用完全限定名或者别名可能会有点不太方便

到此这篇关于.NET 6 即将到来的新特性  隐式命名空间引用的文章就介绍到这了,更多相关.NET 6新特性  隐式命名空间引用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)实例

    前言 听标题的名字似乎是一个非常牛X复杂的功能,但是实际上它确实是非常复杂的,我们本节将演示如何实现对数据,进行组合查询(数据筛选) 我们都知道Excel中是如何筛选数据的.就像下面一样 他是一个并的关系,我们现在要做的也是这样的效果,下面我们将利用EasyUI的DataGrid为例来扩展(就算是其他组件也是可以的,同样的实现方式!) 实现思路 1.前台通过查询组合json 2.后台通过反射拆解json 3.进行组合查询 虽然短短3点,够你写个3天天夜了 优点:需要从很多数据中得到精准的数据,通

  • ASP.NET MVC异步获取和刷新ExtJS6 TreeStore

    从数据库获取构造树结构是ExtJS TreePanel的核心技术,常用方法是TreeStroe里配置proxy,这种方式的root成了一个不受控制的节点. TreeStroe的root实际是一个层叠json数据,大部分情况是直接写一些简单数据,但在实际应用中必定是要从数据库读取的.我的方法是先用Ext.Ajax.request获取root数据形成TreeStroe.定义一个全局的TreeStroe名字是mTreeStore,用Ext.Ajax.request获得root数据.TreeStoreR

  • ASP.NET Core项目配置教程(6)

    在这一章,我们将讨论 ASP.NET Core项目的相关的配置.在解决方案资源管理器中,您将看到 Startup.cs 文件.如果你有以前版本的 ASP.NET的工作经验,你可能希望看到一个 global.asax 文件,您可以在其中编写代码,它是一个编写程序启动时立即执行的代码的文件. 你可能也希望看到一个 web.config 文件,该文件包含您的应用程序执行所需的所有配置参数. 在 ASP.NET Core中,那些文件都没了,取而代之的是 Startup.cs文件. Startup.cs里

  • .NET6中哈希算法的简化用法的实现

    目录 Intro New API Sample Before New API Sample More References Intro 微软在 .NET 6 中引入一些更简单的 API 来使用 HMAC 哈希算法(MD5/SHA1/SHA256/SHA384/SHA512) 微软的叫法叫做 HMAC One-Shoot method, HMAC 算法在普通的哈希算法基础上增加了一个 key,通过 key 提升了安全性,能够有效避免密码泄露被彩虹表反推出真实密码, JWT(Json Web Tok

  • ASP.NET Core部署前期准备 使用Hyper-V安装Ubuntu Server 16.10

    概述 Hyper-V是微软的一款虚拟化产品,和VMWare一样采用的hypervisor技术.它已经被内嵌到Win10系统内,我们只需要进行简单的安装即可.但是前提是要确保你的机器已经启用虚拟化,可以到任务管理器中查看,如下: Ubuntu(乌班图)是一个开源的Linux操作系统,同时为企业提供服务器版本.至于其他发行版本如:CentOS.Debian等,这里不是讨论的重点,本篇是以Ubuntu Server 16.10版本进行安装的.且不说Ubuntu资料多,社区广,单凭它是我大学里边接触到的

  • ASP.NET MVC5+EF6+EasyUI后台管理系统 微信公众平台开发之资源环境准备

    前言: 本次将学习扩展企业微信公众号功能,微信公众号也是企业流量及品牌推广的主要途径,所谓工欲善其事必先利其器,调试微信必须把程序发布外网环境,导致调试速度太慢,太麻烦! 我们需要准备妥当才能进入开发,为后续快速开发作准备 什么是内网穿透? 意在外部网络通过域名可以访问本地IIS站点! 软件环境: Windows10+IIS10 (把本地站点配置到IIS10做为备用,发布站点不作为教程) 知识点:花生壳(主要)ngrok开始: 首先发布站点到IIS,我这里发布站点到本地IIS,并绑定端口为:80

  • CefSharp v62修改方法(支持.net4.0)

    吐槽一下,博客园久了没有上,账号没了,重新申请一个. cesharp v62版本,内核采用最新的Cef 62,支持最新的Grid布局. 由于官方的cefsharp 采用.net4.5.2开发.怎么办怎么办.我只能用.net4.0.没办法啊,自己拿源码修改兼容呗. 仔细分析源码发现: 1.net4.5.2 引入了 async/await 关键字. 这个其实国外大神已经有源码放出来了,我们把代码直接引入cefsharp 这个工程. 就可以直接在4.0里使用 async/await; 2.net4.5

  • ASP.NET MVC5+EF6+EasyUI后台管理系统 微信公众平台开发之消息管理

    前言 回顾上一节,我们熟悉的了解了消息的请求和响应,这一节我们来建立数据库的表,表的设计蛮复杂 你也可以按自己所分析的情形结构来建表 必须非常熟悉表的结果才能运用这张表,这表表的情形涵盖比较多 思维导图 我这个人比较喜欢用思维导图来分析和表达一些模型: 表结构  根据思维导图,我们可以建立的表可以是3张表:消息表,规则表,类型表 消息表:实际的消息 规则表:文本.图文.语音等 类型表:文本.图文.语音(默认回复,订阅回复) 也可以是两张表:规制表,消息表(+一个类型字段) 我这里只设计一张表:消

  • .NET 6 中的隐式命名空间引用

    目录 1.历史变化 2.新版本 3.More usage 4.More 前言: 之前写过一篇隐式命名空间引用的大概介绍,在一些小的测试项目中也有在用,一直没作为示例给大家分享,主要原因在于之前看到了一个关于隐式命名空间引用的 Github issue 提到会有一些破坏性的变更,现在 .NET 6 RC 1 版本已经发布,RC 版本的发布也就意味着新功能的开发已经基本结束,正式版发布之前会专注于各种测试和 BUG 修复. 1.历史变化 .NET 6 Preview 7 时微软已经开始引入隐式命名空

  • .NET 6 即将到来的新特性  隐式命名空间引用

    目录 1.Sample 2.How it works 3.More 前言: 今天看到一个更新,可以不需要写 using了,目前还没有正式发布,应该要到 .NET 6 Preview 7 才会支持. 1.Sample 我们以 Minimal API 为例子 示例: using Microsoft.AspNetCore.Builder; var app = WebApplication.Create(args); app.Map("/", () => "Hello Worl

  • .NET6新特性之 隐式命名空间引用

    早在 .NET 6 Preview 7版本中微软就已经引入隐式命名空间引用.在.NET Preview 7这个版本中这个功能是默认开启的,如果需要禁用它的化就需要配置DisableImplicitNamespaceImports来禁用,但是到了.NET6 RC1版本的时候这个功能是禁用的,如果要使用就需要通过ImplicitUsings来启用.到了.NET6正式版中这个功能又又又默认开启了.下面我们以.NET6正式拜为例,来看一下怎么使用它吧! 如果我们要在新加一个命名空间的引用,可以在项目文件

  • Java 8新特性 内建函数式接口详解

    Java 8新特性内建函数式接口 在之前的一片博文 Lambda 表达式,提到过Java 8提供的函数式接口.在此文中,将介绍一下Java 8四个最基本的函数式接口 对于方法的引用,严格来讲都需要定义一个接口.不管我们如何操作实际上有可能操作的接口只有四种. Java 8 提供了函数式接口包java.util.function.*,在该包下有许多Java 8内建的函数式接口.不过基本上分为四种基本的: 功能型接口 (Function) 将 T 作为输入,返回 R 作为输出,他还包含了和其他函数组

  • PHP5的XML新特性

    面向的读者 这篇文章的面向对象是所有对PHP5的XML新功能感兴趣的各个水平的PHP开发者.我们假定读者掌握XML的基本知识.然而,如果你已经在你的PHP当中使用了XML,那么这篇文章也会让你受益非浅. 介绍 在当今的互联网世界,XML已经不再是一个时髦词了,它已经被广泛的接受和规范的使用了.因此相对于PHP4,PHP5对于XML的支持更受到了重视.在PHP4中你面对的几乎都是非标准,API中断,内存泄漏以及其它不完全的功能.尽管有些不足已经在PHP4.3中得到改进,开发者们还是决定抛弃原有的代

  • scala中的隐式类型转换的实现

    Scala语言中的隐式转换是一个十分强大的语言特性,主要可以起到两个作用: 一.自动进行某些数据类型的隐式转换 String类型是不能自动转换为Int类型的,所以当给一个Int类型的变量或常量赋予String类型的值时编译器将报错.所以,一下语句是错误的. val x: Int = "100" 如果需要将一个字符串类型的整形数值赋给Int,比如使用String.toInt方法,例如: val x: Int = "100".toInt 如果想让字符串自动转换为整形,就

  • JavaScript ES6的新特性使用新方法定义Class

    ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6的标准化工作正在进行中,预计会在14年12月份放出正式敲定的版本.但大部分标准已经就绪,且各浏览器对ES6的支持也正在实现中. ES6中定义类的方式, 就是ES3和ES5中定义类的语法糖,虽然也有些区别,但是整体定义类的方式更加简洁,类的继承更加方便, 如果想对ES6中的继承更加

  • ES6的新特性概览

    Nick Justice是GitHub开发者计划的一员.早在ES6语言标准发布之前,他就借助像Babel这样的转译器以及最新版本的浏览器在自己的项目中使用ES6特性.他认为,ES6的新特性将极大地改变JavaScript的编写方式. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony(和谐之意,显然没有跟上我国的步伐,我们已经进入中国梦版本了).上一次标准的制订还是2009年出台的ES5.目前ES6的标准化工作正在进行中,预计会在14年12月份

  • PHP 7的一些引人注目的新特性简单介绍

    1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1; 它相当于: <?php $a = isset($_GET['a']) ? $_GET['a'] : 1; 我们知道三元运算符是可以这样用的: $a ?: 1 但是这是建立在 $a 已经定义了的前提上.新增的 ?? 运算符可以简化判断. 2. 函数返回值类型声明 官方文档提供的例子(注意 ... 的边长参数语法在 PHP 5.6 以上的版本中才有): <?php

  • Node.js v8.0.0正式发布!看看带来了哪些主要新特性

    前言 Node.js于5月30号在其官方博客上发布了Node.js v8.0.0.这一版本将成为当前的长期维护版本,从2017年10月开始到2019年12月31号.而Node.js v6.0.0将会在2018年4月进入维护模式,并于2019年4月结束. 最新发布的版本代号为Carbon,带来了很多重要的特性改进和一些全新的特性. 引入async_hooks模块 新引入实验性模块async_hooks(之前叫作async_wrap),它包含了一组用于诊断的API,开发人员可以用它监控Node.js

随机推荐