05
8

从WebForm到MVC,一直到Blazor

0
归档:2021年8月分类:C#和.NET

打算下一个项目用Blazor,学习了一个下午,这是一个很不错的全栈UI框架,基于WebAssembly技术,可以让开发人员直接用C#完成js的工作。

学习过程中,我脑子里闪现了自己经历的那个ASP.NET的WebForm时代,那时候我们用UserControl的ascx文件布局网页。查了下,果然是一脉相承。
https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-developers/architecture-comparison

我把消息发群里,大家开始回忆曾经用过的方法,包括ViewState,GridView,IsPostBack,masterpage,repeater,这些技术确实都是一代人的回忆。

不过认真回想,微软的WwebFrom的理念是超前的, 只不过碍于当时的技术发展, 只能做成那样,后来的UI框架其实都给予它的思想。

“技术会落后,思想传承”,微软的技术从WebForm到MVC,一直到一直到Blazor,使用的WebUI的组件技术一直都没有改变,果然是汇集世界一流软件工程师的公司。

18
6

微软具有里程碑意义的Visual Studio 2022 Preview 1已经正式发布,虽然没有增加新功能,但是这个IDE重点支持64位。与此同时,微软也发布了.NET 6 Preview 5。

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-preview-1-now-available/

https://devblogs.microsoft.com/dotnet/announcing-net-6-preview-5/

https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-5/

微软在曾经在4月份在官方的博客文章种宣布了VS2022将会第一次支持64位,不再局限于4GB的内存限制,通过Windows上的64位的Visual Studio,你可以打开,编辑、运行和调试非常复杂的解决方案。

微软通过一个Gif视频展示64位的优势,最新版本的Visual Studio 2022可以轻松打开包含约1600个项目和大约300000个文件的解决方案。

微软在6月17日的文章 Visual Studio 2022 Preview 1 now available!,关键目标是测试和调整新 64 位平台的可扩展性!这是一个巨大的变化,影响到IDE的每一个部分。微软呼吁早期采用者开发者帮助开展这项工作,称"我们需要您的反馈"。VS 2019 功能不包括在预览 1:

Web实时预览
仪器分析仪
Azure 云服务项目支持
T-SQL 调试器
Web负载测试和测试控制器/测试代理
Azure数据湖
Coded界面测试
DotFuscator
内置 IDE 集成
智能提示的代码查找并替换

64 位版本Visual Studio 2022 Preview 1 三个版本的早期版本(社区、专业版和企业版) ,现在已经可以下载了:https://visualstudio.microsoft.com/zh-hans/vs/preview/vs2022/

08
6
原文:bit.ly/3wFqDy9
作者:Daniel
译者:王亮

.NET 6 预览版 4 现已发布,其中包括对 ASP.NET Core 的许多新改进。

下面是此次预览版中 ASP.NET Core 的更新内容:

1 开始使用

要开始使用 .NET 6 Preview 4 中的 ASP.NET Core,请安装 .NET 6 SDK[1]。

如果你在 Windows 上使用 Visual Studio,我们建议安装 Visual Studio 2019 16.11 的最新预览版。如果你在 macOS 上,我们建议安装 Visual Studio 2019 for Mac 8.10 的最新预览版。

2 升级一个现有的项目

要将一个现有的 ASP.NET Core 应用程序从 .NET 6 Preview 3 升级到.NET 6 Preview 4。

将所有 Microsoft.AspNetCore. 引用包更新为 6.0.0-preview.4.

更新所有 Microsoft.Extensions. 引用包更新为 6.0.0-preview.4.

请参阅 .NET 6 中 ASP.NET Core 的完整中断变化列表[2]。

3 引入最小 API

在 .NET 6 中,我们为 Web 应用的托管和路由引入了最小 API。这为使用 .NET 构建第一个 Web 应用程序以及想要构建小型微服务和 HTTP API 的开发者打开了大门。这些精简的 API 提供了 ASP.NET MVC 的优点。

要尝试创建一个最小 API,请创建一个新的 ASP.NET Core 空 Web 应用。

dotnet new web -o MinApi

只需一个文件和几行代码,你现在就有一个功能齐全的 HTTP API。

file

4 新的路由 API

新的路由 API 允许用户路由到任何类型的方法。这些方法可以使用类似控制器的参数绑定、JSON 格式化和 Action 结果。

之前(使用现有的 Map APIs):

app.MapGet("/", async httpContext =>
{
    await httpContext.Response.WriteAsync("Hello World!");
});

现在(使用新的 Map 重载):

app.MapGet("/", (Func<string>)(() => "Hello World!"));

5 C# 10 的改进

这些 API 已经利用了较新的 C# 特性,如顶层语句。在今年晚些时候与 .NET 6 一起发布的 C# 10 中,体验将变得更好。例如,不再需要明确地把类型转换成 (Func)。下面的图片展示了 C# 10 支持的特性:

file

开发者从使用类和方法到使用 lambda,拥有和使用 MVC 控制器及属性操作一样的功能。

6 新的托管(hosting) API

新的空 Web 模板使用的是 .NET 6 Preview 4 中引入的新的托管模式。

var app = WebApplication.Create(args);

app.MapGet("/", (Func<string>)(() => "Hello World!"));

app.Run();

你并不局限于只使用新的路由 API。下面是一个 Web 应用程序的例子,它被更新为使用新的托管模式,配置服务和添加中间件。

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "Api", Version = "v1" });
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Api v1"));
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

新的托管 API 减少了配置和启动 ASP.NET 应用程序所需的模板数量。

7 性能

这些新的路由 API 的开销比基于控制器的 API 少得多。使用新的路由 API,ASP.NET Core 能够在 TechEmpower[3] JSON 基准测试中达到约 80 万 RPS,而 MVC 则达到约 50 万 RPS。

file

异步流

ASP.NET Core 现在支持从控制器 Action 一直到响应的 JSON 格式化器的异步流。从 Action 中返回 IAsyncEnumerable,在发送之前不再在内存中缓冲响应内容。这有助于在返回可异步枚举的大型数据集时减少内存使用。

请注意,Entity Framework Core 提供了用于查询数据库的 IAsyncEnumerable 的实现。在 .NET 6 中,ASP.NET Core 对 IAsyncEnumerable 的支持有所改进,可以使 EF Core 与 ASP.NET Core 的使用更加高效。例如,下面的代码在发送响应前将不再把 Products 数据缓冲到内存中:

public IActionResult GetProducts()
{
    return Ok(dbContext.Products);
}

然而,如果你已经将 EF Core 设置为使用懒加载,这种新的行为可能会导致在数据被枚举时由于并发的查询执行而产生错误。你可以通过自己缓冲数据来恢复到以前的行为:

public async Task<IActionResult> Products()
{
    return Ok(await dbContext.Products.ToListAsync());
}

有关这一行为变化的更多细节,见相关公告[4]。

8 HTTP 日志中间件

HttpLogging 是一个新的内置中间件,可以记录 HTTP 请求和 HTTP 响应的信息,包括头信息和整个 Body。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseHttpLogging();
}

HttpLogging 中间件提供了以下日志:

HTTP 请求信息

普通属性

头信息

请求 Body

HTTP 响应信息

为了配置 HTTP 日志中间件,你可以在对 ConfigureServices() 的调用中指定 HttpLoggingOptions:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}

这会在日志中产生新的带有 Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware 类别的 HTTP 请求信息。

关于如何使用 HTTP 日志的更多信息,请看 HTTP 日志文档[5]。

9 使用 Kestrel 作为默认启动

file

对于在 .NET 6 Preview 4 中创建的所有新项目,我们已将默认的启动配置文件从 IIS Express 改为 Kestrel。在开发应用程序时,启动 Kestrel 的速度明显加快,并带来了更灵敏的体验。

IIS Express (ms) Kestrel (ms) % change
Debugging 4359 2772 36%
No debugging 1999 727 64%

IIS Express 仍然可以作为启动项,用于 Windows 认证或端口共享等情况。

10 IConnectionSocketFeature

IConnectionSocketFeature 功能使你能够访问与当前请求相关的底层接受 socket。它可以通过 HttpContext 上的 FeatureCollection 访问。

例如,下面的应用程序在接受 socket 上设置 LingerState 属性:

var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
    serverOptions.ConfigureEndpointDefaults(listenOptions => listenOptions.Use((connection, next) =>
    {
        var socketFeature = connection.Features.Get<IConnectionSocketFeature>();
        socketFeature.Socket.LingerState = new LingerOption(true, seconds: 10);
        return next();
    }));
});
var app = builder.Build();
app.MapGet("/", (Func<string>)(() => "Hello world"));
await app.RunAsync();

11 改进单页应用(SPA)模板

略...(译注:文字太长,懒得翻译了,主要 VS 中的 SPA 模板我从来不用)

12.NET 热重载

最新的 Visual Studio 预览版对.NET Hot 热重载有一些初步的支持。你可能已经注意到在调试你的应用程序时,新的 Apply Code Changes 按钮和调试选项。

Apply Code Changes 按钮将用你所作的代码修改来更新正在运行的应用程序,甚至不需要保存。下面是一个更新 Counter 组件的例子,它的增量从 1 改为 2。请注意,一旦修改被应用,当前的计数不会丢失:

file

Visual Studio 中的 .NET 热重载支持仍在进行中,因此在 ASP.NET Core 应用程序中使用它时有一些限制:

你必须在连接调试器的情况下运行以应用更改。

代码修改只能应用于 C# 文件--还不支持对 Razor 文件(.razor, .cshtml)的修改。

已应用的更改还不能强制更新用户界面,因此需要手动触发用户界面更新。

目前不支持 Blazor WebAssembly 应用程序。

所有这些限制都在解决中,并将在未来的 Visual Studio 更新中得到解决。敬请关注!

如果你通过 dotnet watch 使用 .NET 热重载,修改将被应用于 ASP.NET Core 托管的 Blazor WebAssembly 应用程序。如果你刷新浏览器,修改也会重新应用到你的 Blazor WebAssembly 应用程序。

要了解更多关于.NET 热重载的信息,你可以在我们的博文中获得所有细节:介绍.NET 热重载[6]。

13 Razor 中的泛型约束

在 Razor 中使用 @typeparam 指令定义通用类型参数时,你现在可以使用标准的 C# 语法指定泛型约束。

@typeparam TEntity where TEntity : IEntity

14 Blazor 错误边界

Blazor 错误边界提供了一种方便的方式来处理组件层次结构中的异常情况。为了定义一个错误边界,使用新的 ErrorBoundary 组件来包裹一些现有的内容。只要一切运行顺利,ErrorBoundary 组件将渲染其子内容。如果一个未处理的异常被抛出,ErrorBoundary 会渲染一些错误 UI。

例如,我们可以像这样在默认 Blazor 应用程序的布局中添加一个错误边界:

<div class="main">
  <div class="top-row px-4">
    <a href="https://docs.microsoft.com/aspnet/" target="_blank" rel="noopener">
      About
    </a>
  </div>

  <div class="content px-4">
    <ErrorBoundary> @Body </ErrorBoundary>
  </div>
</div>

该应用程序继续像以前一样运作,但现在我们的错误边界将处理未处理的异常。例如,我们可以更新 Counter 组件,在计数过大时抛出一个异常。


private void IncrementCount()
{
    currentCount++;
    if (currentCount > 10)
    {
        throw new InvalidOperationException("Current count is too big!");
    }
}

现在,如果我们过多地点击计数器,就会抛出一个未处理的异常,这将由我们的错误边界通过渲染一些默认的错误界面来处理。

file

默认情况下,ErrorBoundary 组件为其错误内容渲染了一个带有 blazor-error-boundary CSS 类的空 div。这个默认界面的颜色、文本和图标都是在应用程序中使用 CSS 定义的,所以你可以自由地定制它们。你也可以通过设置 ErrorContent 属性来改变默认的错误内容。

<ErrorBoundary>
  <ChildContent> @Body </ChildContent>
  <ErrorContent>
    <p class="my-error">Nothing to see here right now. Sorry!</p>
  </ErrorContent>
</ErrorBoundary>

因为我们在布局中定义了错误边界,一旦抛出一个异常,不管我们导航到哪个页面我们都能看到错误内容。一般来说,错误边界的范围最好比这更窄,但我们可以选择在随后的页面导航中通过调用错误边界的恢复方法将错误边界重置为非错误状态。

<ErrorBoundary @ref="errorBoundary">
    @Body
</ErrorBoundary>
...

@code {
    ErrorBoundary errorBoundary;

    protected override void OnParametersSet()
    {
        // On each page navigation, reset any error state
        errorBoundary?.Recover();
    }
}

15 Blazor WebAssembly 的 AOT 编译

Blazor WebAssembly 现在支持 AOT(ahead-of-time) 编译,你可以将你的 .NET 代码直接编译为 WebAssembly,以显著提高运行时性能。现在 Blazor WebAssemby 应用程序使用 WebAssembly 中实现的 .NET IL 解释器运行。由于 .NET 代码是被解释的,通常这意味着在 WebAssembly 上运行的 .NET 代码比在正常的.NET 运行时要慢得多。.NET WebAssembly AOT 编译通过将你的 .NET 代码直接编译成 WebAssembly 来解决这个性能问题。

AOT 编译你的 Blazor WebAssembly 应用程序,对于 CPU 密集型任务来说,其性能的提高是相当显著的。例如,下面的片段显示了使用相同的 Blazor WebAssembly 应用程序进行一些基本图像编辑的比较,首先使用解释器,然后是 AOT 编译。AOT 编译后的版本运行速度快了五倍以上。

file

你可以在 GitHub 上查看这个 PictureFixer[7] 的代码。

.NET WebAssembly AOT 编译需要一个额外的构建工具,必须作为一个可选的 .NET SDK 工作负载来安装才能使用。要安装 .NET WebAssembly 构建工具,请运行以下命令:

dotnet workload install microsoft-net-sdk-blazorwebassembly-aot

为了在你的 Blazor WebAssembly 项目中启用 WebAssembly AOT 编译,在你的项目文件中添加以下属性:

true

然后 AOT 将你的应用程序编译成 WebAssembly,发布应用程序。使用 Release 配置发布将确保 .NET IL 链接也被运行,以减少发布应用程序的大小。

dotnet publish -c Release

WebAssembly AOT 编译只在项目发布时进行。当项目在开发过程中运行时,它并不使用。这是因为 WebAssembly AOT 编译可能需要一段时间。

AOT 编译的 Blazor WebAssembly 应用程序的大小通常比作为 .NET IL 的应用程序要大。在我们的测试中,大多数 AOT 编译的 Blazor WebAssembly 应用程序大约大2倍,不过这取决于具体的应用程序。这意味着,使用 WebAssembly 的 AOT 编译,可以用加载时间的性能换取运行时间的性能。这种权衡是否值得,取决于你的应用程序。

16 .NET MAUI Blazor 应用

Blazor 能够用 .NET 构建客户端 Web UI,但有时你需要的东西比 Web 平台提供的更多。有时你需要完全访问设备的本地功能。现在,你可以在 .NET MAUI 应用程序中托管 Blazor 组件,以使用 Web UI 构建跨平台的本地应用程序。这些组件在.NET 进程中原生运行,并使用本地互操作通道向嵌入式 Web 视图控件渲染 Web UI。这种混合方法为你提供了本地和网络的优点。你的组件可以通过 .NET 平台访问本地功能,并呈现标准的 Web UI。.NET MAUI Blazor 应用程序可以运行在任何 .NET MAUI 可以运行的地方(Windows、Mac、iOS 和 Android),尽管我们对 .NET 6的主要关注是在桌面场景。

要创建一个 .NET MAUI Blazor 应用程序,你首先需要在开发机器上配置 .NET MAUI。最简单的方法是使用 maui-check 工具。要安装 maui-check 工具,请运行:

dotnet tool install -g Redth.Net.Maui.Check
然后运行 maui-check 来获取 .NET MAUI 工具和依赖。有关开始使用 .NET MAUI 的其他信息,请参考 GitHub 上的 wiki 文档。

一旦一切安装完毕,使用新的项目模板创建一个 .NET MAUI Blazor 应用程序:

dotnet new maui-blazor -o MauiBlazorApp
你也可以使用 Visual Studio 创建一个 .NET MAUI Blazor 应用程序:

file

.NET MAUI Blazor 应用程序是 .NET MAUI 应用程序,它使用 BlazorWebView 控件将 Blazor 组件渲染到一个嵌入式 Web 视图中。应用程序的代码和逻辑位于 MauiApp 项目中,该项目被设置为多目标 Android、iOS 和 Mac Catalyst。MauiApp.WinUI3 项目用于为 Windows 构建,而 MauiApp.WinUI3(Package) 项目则用于为 Windows 生成 MSIX 包。最终,我们希望将对 Windows 的支持合并到主应用程序项目中,但现在这些独立的项目是必要的。

在 MauiApp 项目的 MainPage.xaml 中设置了 BlazorWebView 控件:

<b:BlazorWebView HostPage="wwwroot/index.html">
    <b:BlazorWebView.RootComponents>
        <b:RootComponent Selector="#app" ComponentType="{x:Type local:Main}" />
    </b:BlazorWebView.RootComponents>
</b:BlazorWebView>

该应用程序的根 Blazor 组件在 Main.razor 中。其余的 Blazor 组件都在 Pages 和 Shared 目录下。请注意,这些组件与默认 Blazor 模板中使用的组件相同。你可以在你的应用程序中使用现有的 Blazor 组件,而不用改变代码,或者引用包含这些组件的现有类库或包。应用程序的静态资源在 wwwroot 文件夹中。

17 Windows

要在 Windows 下运行该应用程序,你需要使用 Visual Studio 构建和运行。

选择 MauiBlazorApp.WinUI3(Package) 项目作为你的启动项目:

file

同时为目标平台选择 x64:

file

然后你可以按 F5 或 Ctrl+F5,使 WinUI 应用作为本地 Windows 桌面应用运行。

file

18 Android

要在 Android 上运行该应用程序,首先使用 Android SDK 或 Android 设备管理器启动 Android 模拟器。

然后使用以下命令从 CLI 运行该应用程序:

dotnet build MauiBlazorApp -t:Run -f net6.0-android

要从 Visual Studio 在 Android 上运行,选择 MauiBlazorApp 项目作为启动项目:

file

然后在运行按钮下拉菜单中选择 net6.0-android 作为目标框架:

file

然后你可以点击 F5 或 Ctrl+F5,使用安卓模拟器运行该应用程序:

file

19 iOS 和 Mac Catalyst

译注:Mac Catalyst 是一个帮助开发者将 iOS 应用移植到 macOS 上的服务。

要运行 iOS 或 Mac Catalyst 的应用程序,你需要使用一个运行 Big Sur 的 macOS 开发环境。你目前不能从 Windows 开发环境中运行 iOS 或 Mac Catalyst 的应用程序,尽管我们确实期望 .NET MAUI 将支持使用连接的 Mac 构建代理或使用热重启在连接的设备上运行 iOS 应用程序。

要运行 iOS 和 Mac Catalyst 的应用程序,请使用以下命令:

dotnet build MauiBlazorApp -t:Run -f net6.0-ios
dotnet build MauiBlazorApp -t:Run -f net6.0-maccatalyst

file

在这个版本中,.NET MAUI Blazor 应用程序有一些已知的限制:

组件范围内的 CSS 文件(.razor.css)还不能在主 .NET MAUI 项目中使用。这将在未来的更新中得到修复。

了解更多关于 .NET 6 Preview 4 中 .NET MAUI 的新内容[8]。

20 其他性能改进

略...(注:这部分列举了一些社区贡献的提高性能的 PR,没啥可翻译的,感兴趣的同学可以直接在英文原文点击链接查看。)

21 提供反馈

我们希望你喜欢此次 .NET 6 中的 ASP.NET Core 预览版。我们很想听听你对这个版本的体验。在 GitHub[9] 上提交 Issue,让我们知道你的想法。

感谢你尝试使用 ASP.NET Core!

文中链接:

[1]. https://dotnet.microsoft.com/download/dotnet/6.0
[2]. https://docs.microsoft.com/dotnet/core/compatibility/6.0#aspnet-core
[3]. https://www.techempower.com/benchmarks/
[4]. https://github.com/aspnet/Announcements/issues/463
[5]. https://docs.microsoft.com/aspnet/core/fundamentals/http-logging
[6]. https://aka.ms/build2021-hotreload
[7]. https://aka.ms/picture-fixer
[8]. https://devblogs.microsoft.com/dotnet/announcing-net-maui-preview-4
[9]. https://github.com/dotnet/aspnetcore/issues
26
5

社区正式发布.NET 6 Preview4

0
归档:2021年5月分类:C#和.NET

时间过得真快,.NET 5我还没有来得及研究,眼看.NET 6的正式版本马上就要来了,我一直期待这个版本,因为这是LTS版本,我们团队会迁移到这个版本上来。

社区一直在不断推进.NET 6的可用性,Build 2021大会发布了Preview4,这个版本更新很大,可能与最终的版本相差不大,,正式发布RC版本是在8月份,正式发布RTM版本是在11月 ,到时后.NET正式完成.NET Framwork和.NET Core以及Mono的功能统一,还是非常值得期待的。

新产品功能:

System.Text.Json support for IAsyncEnumerable
System.Text.Json: Writable DOM Feature
Microsoft.Extensions.Logging compile-time source generator
System.Linq enhancements
Significantly improved FileStream performance on Windows
Enhanced Date, Time and Time Zone support
CodeGen
.NET Diagnostics: EventPipe for Mono and Improved EventPipe Performance
IL trimming
Single-file publishing
CLI install of .NET 6 SDK Optional Workloads
Built-in SDK version checking
CLI Templates (dotnet new)

另外,还有.NET MAUI或多平台应用UI :允许开发人员构建适用于Windows、MacOS、ios 和android的应用程序,共享单一代码库和模板。
ASP.NET Blazor混合应用程序:帮助开发人员构建基于Web的跨平台桌面体验,从而利用本机设备功能。
对ARM的加强支持:包括 Silicon 和ARM64支持。

05
1

2020年中国.NET开发

在2019年上海中国.NET开发者大会的基础上,2020年12月19日 继续以“开源、共享、创新” 为主题的第二届中国 .NET 开发者峰会(.NET Conf China 2020)在苏州人工智能智能产业创新中心拉开帷幕。微软云(Microsoft Azure)和葡萄城作为本次峰会白金赞助,明源云作为银牌赞助,朝夕教育作为铜牌赞助,泰链智能和递易智能作为星牌赞助,还有很多合作伙伴给予了峰会大力支持!本次大会以线下城市苏州为中心,覆盖北京、上海、深圳、广州、长沙、成都、徐州、山东、西安、武汉等地区,是中国 .NET 开发者的大聚会,今年由于疫情的特殊原因,组委会特意控制大会的参与人数为300人,加强线上直播方便全国的开发者参与,在CSDN和思否的战略媒体合作和线上大会直播支持下,线下参会人数突破了400人(含讲师,志愿者及合作伙伴),CSDN和思否线上直播累计触达突破40万人次。

除了大会外,我们在会前(12月18日)安排了 .NET Conf Eve(带着大家提前了解大会细节),在大会当天(12月19日)安排了采访环节同步直播,通过采访大会讲师,合作伙伴,志愿者,观众等从不同维度报道大会盛况。第二天(12月20日)特别安排了 Blazor 及 NCF 工作坊。让对Coding感兴趣的伙伴们带上电脑,沉浸式现场开发。

本次峰会完全由来自.NET技术圈开发者们的志愿者进行组织。从大家看到的精美海报,到活动现场的许多志愿者、主持人,这些都是来自对.NET 技术充满热情的优秀开发者们;尤其是那些为大家带来精彩内容的老师们,他们有时候为了PPT上的每一页内容,需要花费大量的业余时间;除了这些之外,我们还能看到许多细节,如那些设计精美的PPT、那些设计精良的文化衫、甚至还有那些小巧玲珑的贴纸图案、海报,无一不是来源于社区志愿者的精心奉献。

群英集聚,力求卓越

来自全国各地的超过400名 .NET 开发者受邀参与这次大会,超过40万人次通过直播参与大会,来自各领域的40多位资深讲师就 .NET Core ,跨平台,微服务、K8S、机器学习、大数据、IoT、混沌工程、DevOps以及自主创新等当前最为热门的科技专题做了多场精彩绝伦的演讲,与全国的 .NET 开发者一起共享技术盛宴。如此规模的中国 .NET 开发者峰会能够成功举办离不开社区伙伴、企业伙伴和志愿者的多方努力,他们共同携手,打造了中国最具影响力的 .NET 开发者峰会。

“开源、共享、创新”

这次大会的主题是“开源 共享 创新”, 这象征着中国 .NET 社区走向开放、走向世界、走向辉煌的未来趋势和历史使命。曾经, .NET 技术的发展只能依靠微软,而今,要依靠的不仅仅是微软,更是真正的社区力量。6年来,在微软 CEO 萨提亚·纳德拉的带领下,微软发生了巨大的变化,微软通过成立 .NET 基金会(dotnetfoundation.org)全面扶持开源项目。据 GitHub 最新发布的年度报告显示,按贡献者列出的增长最快的开源项目,用于跨语言和平台构建应用程序和网站的工具包和框架在今年有了显著的增长,全球.NET开发者500万,其中200万已经使用.NET Core, 在中国也有50万.NET开发者,.NET Core开发者也有20万。与此同时, .NET 社区在中国也发生了巨大变革,互联网大时代的一波波浪潮或许不会再滚滚而前,但产业互联网的大势已经拉开,而这意味着未来的时代将会成为 .NET 开发者们的主场,在 github/gitee 上活跃着很多中国的.NET 开源开发者组织,例如NCC、盛派开发者、Abp,龙芯.NET等。龙芯团队正式在大会上发布了龙芯.NET。

本次峰会持续两天,议题涵盖:云原生应用开发、 .NET 在云服务、游戏开发、区块链、大数据、机器学习、物联网的应用等。图文直播曝光量22697人次,主题演讲视频直播高峰在线观看10万人次。

大会亮点 大神云集

.NET 社区汇集全球富有实践经验的讲师、开源贡献者,来自微软、葡萄城、龙芯、明源云、蔚来汽车等超40位.NET领域权威技术专家齐聚苏州。大会开始前,来自苏州工业园区的领导** 进行了大会致辞,微软全渠道事业部CTO徐明强博士为我们带来《.NET,应您所想的应用开发平台》从.NET生态动力、.NET在全球影响力、中国.NET社区和.NET5的技术提升等多个方面微软近年来在.NET5和开源生态上做出的努力,微软大中华区Azure事业部总经理林家伟还带来了 远在美国的Julia Liuson 和 的大咖视频,龙芯.NET项目和JVM项目负责人敖琪在大会上正式发布了龙芯.NET, 来自日本东京的桂素伟线上直播分享了他基于K8S 复杂项目交付等。

2020中国 .NET 开发者峰会携手国内外社区,是当今最具发展前景的盛会,也是国内 .NET 社区近一年来社区发展的集中展示。从南方大湾区、中部长沙武汉、西部成都与西安,到北方的胶东开发者部落,均参与了这次峰会,众多开源社区NCC、盛派开发者、Abp,龙芯.NET等都在本次大会上展现了社区的蓬勃发展。这次峰会是当之无愧的国内 .NET 社区发展集结号。

.NET 基金会引领的开源社区齐聚开源顶级项目,以吸引目标用户、开发者和贡献者。苏州三星高级研发工程师仇华 分享的《.NET 深度学习的工业视觉解决方案》为我们带来了原生的、更高效的利用 .NET 部署人工智能工业解决方案,通过ML.NET和TF.NET的搭配让“ .NET 做人工智能”变得更简单。人大数媒科技(北京)有限公司技术总监黄立敬 带来的《国产化系统下的.NET Core实践》以亲身经验向大家传授.NET 在国产化系统下的实践,给大家树立新时代的.NET 发展信心。

还有众多开源项目的作者在大会上为大家带来他们的开源项目实践经验分享。NCC社区、 盛派开发者社区、ABP社区等的多个开源项目作者 在大会上向社区展现他们的开源解决方案。

大家所认为的.NET 弱势领域 大数据 和前端技术领域,在这次大会上正向大家展示了.NET的无穷潜力。汽车之家搜索工程师贾维维的主题《.NET 5与高性能计算》给我们展示了.NET 5为我们构建大数据生态的技术基础以及他自身在这一领域的尝试,特来电技术架构师 刘佳海 的主题《特来电稳定性保障技术体系实践》为我们展示了他在使用.NET 技术打造新能源充电行业领先的稳定性运维保障技术体系。.NET 基金会项目Ant Design Blazor作者杨舜杰和陈超超带来的基于WebAssembly技术的前端框架Blazor 主题内容从入门到开发实践,展示了.NET 在前端领域的新星。12月20日的工作坊-- 基于 Blazor 的 C# 前端开发实战工作坊 让大家体验用 C# 进行前后端 Web 应用开发的新姿势。

我们已经开始进入万物互联时代,.NET 在物联网时代更具优势,来自特来电 云平台技术负责人周国庆 的主题—基于.NET技术栈的互联网技术平台揭秘,支撑了中国最强新能源汽车充电网的大规模应用,来自蔚来汽车的数字化发展软件开发与创新部的系统架构师朱宗海向大家分享了.NET 在制造业数字化转型,向着智能制造业的转型升级过程中,我们.NET开发人员不仅具有广阔的前景,更有丰厚的钱景。苏州三星高级研发工程师仇华也向我们展示了在制造业的人工智能应用的.NET解决方案。

低代码技术在数字化转型新战场上是今年的热点,大会上有多位讲师带来相关内容,例如明源云架构师唐敦峰 分享的基于Entity Framework Core的元数据驱动架构,程析智能的刘腾飞分享的-.NET Core 面向元数据驱动的架构。

.NET Core 的云原生特性(镜像体积小、占用内存低、启动速度快)非常符合云原生技术的潮流,大会主题内容的一个突出特点恰恰是.NET Core在云原生的实践案例分享。

本次大会由社区主办,来自社区并服务于社区(Everyone comes from community, everyone serves community),后续,由多城市社区主办的 .NET 社区活动也在将不同城市开展。或许,就在你的身边,关于“中国 .NET 发展、开源、共享、创新”的探讨正在火热进行中!

原文地址: https://www.cnblogs.com/shanyou/p/14223309.html

20
12

这两三天一直在苏州,参加2020年中国.NET开发者大会,我第一次以讲师的身份参加技术大会,以前都是作为听众,这一次也是代表公司出去做技术交流,为此做了不少准备工作。

我从大学就是用C#和.NET,一直默默关注C#开源社区,2010年玩过Mono,2013年采用Xamarin开发Android应用,从2019年起开始带来团队实践.NET Core项目,公司核心的产品已经迁移到.NET Core,今年以来带领团队完成国产化系统下的.NET Core项目改造。

我的演讲主题是国产化系统下的.NET Core实践经验和心得,这是我们过去一年多以来的实践和心得,主要包括以下几个重点:

1、国产系统现状和要求,包括CPU、操作系统和中间件的要求,如何突破目前中间件对Java的特殊保护,到底是用java重写还是迁移.NET  Core,给出实用的迁移建议;

我的建议是“尽量不要重复造轮子,坚持使用DotNet”,而解决方案是如下:

file

2、国产化各种准备工作,重点技术预研,特别是现有系统的各个类库对.NET  Core的支持情况,最终做出技术评估;

file

3、项目迁移工作,除了按照官方要求迁移之外,还需要考虑系统在各个平台的可移植情况,我们迁移过程中遇到的问题和解决办法;

1)、现有系统的各个类库对.NET Core的支持情况:官方API和类库基本没有问题;重点注意第三方类库,比如Lucence.NET,Zip解析等
2)、客户迁移的要求情况:如果服务器CPU架构必须是申威,要重视;如果是龙芯可以拖一拖,但是其实可以和客户提系统支持的要求。

4、项目测试,模拟各种国产CPU搭建测试环境,并对系统进行测试;

file

5、国产专用服务器上的系统部署实践,部署过程中的问题和解决方案。

file

结语:开源,自由、开放的社区是创新的力量之源,这也是互联网诞生的初心。今天主持人说到会90后超过一半,还是很希望90后、00后和未来者们都知道什么是网站URL地址,都知道怎么使用搜索引擎,不要只是被困在算法和移动应用之中。

27
9

这两个月来带领团队实践安可国产化系统下的DotNet Core,我们积累了一些经验,这里做一下记录。

1、DotNet Core可以在安可下面运行吗?

首先,答案是肯定的。目前除了龙芯架构的服务器不支持DotNet Core(龙芯团队已经在努力,他们预计会尽快支持DotNet Core的下一个版本),其他所有平台架构的都支持,目前我们实际客户的操作系统有:ARM64(包括其扩展Aarch64)、X64,这些服务器包括飞腾、华为鲲鹏等国产服务器。

2、迁移麻烦吗?工作量有多大?

非常靠谱。DotNet兼容性做得非常好,只要是它支持的架构的服务器,都可以很好地运行。
file
唯一需要考虑的是,如果项目用到的第三方库比较多,需要逐个验证迁移工作,大部分流行的第三方库都已经支持DotNet Core。

3、Java重写还是迁移?

除非你们团队已经没有DotNet开发人员了,否则千万不要用Java重写,一方面是工作量大,另一方面是java的项目换到安可环境也是需要做很多适配工作。
而且我可以很负责任地说:DotNet Core的运行效率超级棒!几乎可以用飞快来形容。

4、迁移过程中有哪些经验?

代码经验

我们的代码几乎无缝转移过去,唯一的地方就是全文检索lucene.net,现在这个项目已经有更新,发了十几个bata版本,我认为可以用,所以升级过来了。
另外,安可要求只能用国产达梦数据库,需要做适配,还好这些数据库基本都是开源改过来的,适配不是问题,就是一些日期等细节需要主义。

服务器经验

我们第一个项目是迁移到政务系统,要求非常严格,有专用的服务器。我们先是在通用测试服务器下(Aarch64架构CPU,中标麒麟操作系统和银河麒麟操作系统),运行起来没有任何问题。后来在专用服务器下,架构和CPU都不变,但是专用服务器涉密,所以不能随意使用命令安装库,也不能更新系统库,只需要找到合适的包用专用服务器工具安装就可以,如果是系统库文件,就让厂商安装。

5、最大的问题是什么?

最大的问题是,安可要求服务器必须通过中间件安装系统,这些中间件其实就是web服务器,比如金蝶之类的,这里很崩溃,因为这些国产中间件只支持java,其实就是另外一个tomcat,我也认为他们基于开源改造。
后来我们的解决办法是,前后端分离,通过金蝶发布前端web站点,后端启动5000端口提供DotNet Core服务,这个并不违法安可要求。DotNet Core基于最开放的MIT开源协议,比java开放多了。

24
8

关于IT国产化盛宴的几点感想

0
归档:2020年8月分类:C#和.NET

这三周来牺牲社交时间,我亲自出马、带着团队三名精干主力在“中标麒麟龙芯”下编译.Net Core 3.0、并调试程序,编译通过但Bug太多,以失败而告终,最后放弃这个平台,这不是我们的问题,这是龙芯团队的问题,他们的CPU对彻底开源的.NET支持台还很差(也许明年会好些),不过目前我们支持“中标麒麟兆芯”,这个平台也完全符合安可要求。

从我接触到的情况来看,目前最鸡血的是那些国字号相关的企业,不过如果不涉密,但大部分也只是买来应付检查,因为国产服务器真的是几乎不能用。还有一些比较聪明的单位,直接购买云国产操作系统,但是这些国产云操作系统就是一个幌子,因为它们也是跑在“洋芯片”、寄生在“洋软件”下面而已。

Java的码农请别吐槽C#,两门语言都是“美帝”发明的开发语言哦,要说彻底支持符合国产要求,别忘了Java的SDK还有专利费,而且Java的拥有者Oracle告谷歌的侵权诉讼案还没结束呢,哈哈。

另外,很想对那些摇着民族主义旗号大喊国产的人,有本事从应用软件到开发语言彻底国产,还有哦,wifi现在澳洲公司还在收专利费、互联网也是MIT的发明、Apache基金会的总部现在还设在美国的马里兰州……这只是一场分蛋糕大盛宴,曲终人必散,苦的是那些重复造轮子的码农,还好我们已经脱离苦海。

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。