Skip to main content

· 3 min read
dotNET China

简介​

在 .NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置​

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用​

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using​

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK​

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级​

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework> 为 <TargetFramework>net6.0</TargetFramework>。

同时升级所有 Microsoft 和 Furion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1。

新项目使用​

升级 Visual Studio 2019​

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子​

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2。

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目​

打开浏览器查看效果即可。

· One min read
dotNET China

Furion 从 v2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web,控制台,WinForm,WPF,Xamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK​

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级​

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework> 为 <TargetFramework>net6.0</TargetFramework>。

同时升级所有 Microsoft 和 Furion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1。

新项目使用​

升级 Visual Studio 2019​

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子​

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1。

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目​

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了​

安装 .NET 6 Preview 5 SDK​

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019​

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子​

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9。

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目​

打开浏览器查看效果即可。

· 2 min read
dotNET China

文件下载​

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

· 2 min read
dotNET China

HttpContext 重大调整​

在 ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式​