天道酬勤,学无止境

【重榜?】.NET 6 Preview 1 开箱上手!带你尝试新版本更新!


目录

  • 跨平台 UI 应用
  • Blazor 桌面应用
  • System.CommandLine
  • 其它更新
  • ASP.NET Core


最近 .NET 6 Preview 1 发布了,.NET 统一是此版本的核心。大家可以读一下原文博客:


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

.NET 6.0 SDK 和 Runtime 下载地址:

https://dotnet.microsoft.com/download/dotnet/6.0

下面笔者将给大家介绍一下 .NET 6 Preview 1  目前的更新内容和上手尝试一些好玩的更新。

本文并非翻译文章,纯手工打造。

跨平台 UI 应用

.NET6 对多平台(Android、IOS等)界面应用程序做了统一,提供了在多种平台和设备上一致的体验,并且可以在移动应用和 PC桌面程序之间共享更多的代码。多平台统一工具包是基于 Xamarin.Forms 的集成和拓展,使得我们可以开发 Windows、MacOS、Android 和 IOS 桌面应用。

目前 Visual Studio 支持 Windows 和 MacOS,在已经安装了 .NET6 SDK 的机器上,发布的桌面程序可以在 Windows 和 MacOS 上运行,如果要支持 Android 和 IOS ,则需要下载另外两个包。这是因为 Windows 和 MacOS 可以通过安装 .NET6 Runtime 去运行程序,运行的是 .dll 文件(IL中间代码),而 Android 和 IOS 都是发布和运行本机代码。

# Windows 下载
Microsoft.NET.Workload.Android.11.0.200.85.msi
Microsoft.NET.Workload.iOS.14.3.100-ci.main.1079.msi

# MacOS 下载
Microsoft.NET.Workload.Android-11.0.200-ci.master.85.pkg
Microsoft.iOS.Bundle.14.3.100-ci.main.1079.pkg

读者可以到 https://github.com/dotnet/net6-mobile-samples 查找下载链接,发现不开代理下载不了,各位请注意。

创建Xamarin项目

.NET6 运行时有 android 和 ios 的特殊标记,要支持移动应用,需要指定名称,如要支持 Android,在 .csproj 文件中:

    net6.0-android

下面是一个 Xamarin.Forms 应用的 .csproj 模板:

net6.0-android;net6.0-iosios-x64Exe

当然,要发布或者调试程序,需要 SDK 或 仿真器,例如安卓需要 Android SDK以及Android SDK Platform 30,发布的时候也需要指定:

dotnet build HelloForms -t:Run -f net6.0-android
dotnet build HelloForms -t:Run -f net6.0-ios

官方的示例项目中,nuget 包需要访问 pkgs.dev.azure.com,不代理访问不了。因此,这个示例项目搞不了,大家看着过过瘾就行。

目前 .NET6 Targeting  有:

  • net6.0
  • net6.0-android
  • net6.0-ios
  • net6.0-maccatalyst
  • net6.0-macos
  • net6.0-tvos
  • net6.0-windows

Blazor 桌面应用

我想,看到这个更新,最开心的是 Ant Design of Blazor 项目的主导作者 James Yeung 吧。

img

james_mvp

.NET6 中,可以将 Blazor 拓展混合到 UI 应用程序中,将 Web 和本机 UI 结合在一起,可以在桌面中嵌入运行。Blazor 混合开发的方式,称为 Blazor Hybrid Apps。

.NET Core 3.0 支持 Blazor Server,3.1 支持 Blazor WebAssembly,Blazor WebAssembly 使用 Mono 运行时,很多 .NETer 应该体验过 Blazor 开发,WebAssembly 目前来看还是太大了(.NET Core 3.x),还有性能差等问题。后续 .NET 版本对其进行了大量优化。

VS2019 Preview4 中这个模板名称变成了 Blazor WebAssembly App ,实际上就是 WebAssembly,加上了 App 这个名称,但是并不代表是 UI 程序,它依然是 web。

BlazorWebAssemblyApp

回归正题,.NET6 更新的博客说这个 Blazor 可以跟 MAUI一起搞,但是博客并没有提到 Demo 和实现细节,可能还在继续开发中,Preview 1 可能暂时看不了。那 TM 我下载 VS2019 Preview4 后,还是不能直接创建???耍我呢?怎么体验这个 Blazor 开发桌面应用?

不久前有人创建了这个 Issue:https://github.com/Webreaper/Damselfly/issues/108

不过,Blazor 倒是可以跟移动应用搞一起,有个项目叫  Mobile Blazor Bindings,可以将 Blazor 结合到 Xamarin 中,这个项目在 .NET Core 3.x 就已经支持了。

项目地址:https://github.com/dotnet/MobileBlazorBindings

示例代码:

You pressed @count times@code {
    int count;

    void HandleClick()
    {
        count++;
    }
}

mobileblazor

这种项目,使用的是 Microsoft.MobileBlazorBindings.Templates 库,这个库封装了大量的 Razor 组件。

我们可以通过 dotnet 命令来创建这种项目,对应模板如下:

Template Name                                   Short Name            Language    Tags
----------------------------------------------  --------------------  ----------  ------------------------
Experimental Mobile Blazor Bindings App         mobileblazorbindings  [C#]        Blazor/Xamarin.Forms
Experimental Mobile Blazor Bindings Hybrid App  blazorhybrid          [C#]        Blazor/Xamarin.Forms/Web

mobileblazorbindings 不好玩,大家不要试。

我们可以使用命令来创建模板项目:

 dotnet new   blazorhybrid
目录结构:
H:.
├─HBlazor
│  ├─WebUI
│  │  ├─Pages
│  │  └─Shared
│  └─wwwroot
├─HBlazor.Android
│  ├─Assets
│  ├─Properties
│  ├─Resources
│  └─wwwroot
├─HBlazor.iOS
│  ├─Assets.xcassets
│  ├─Properties
│  └─Resources
│      └─wwwroot
├─HBlazor.macOS
│  ├─Assets.xcassets
│  └─Resources
│      └─wwwroot
└─HBlazor.Windows
    └─wwwroot

但是官方的示例项目有 Bug,而且项目莫名其妙异常,大家试着玩一下就行了。

blazorhybrid

这个原理是 Microsoft.MobileBlazorBindings 封装了一系列的 razor 组件,然后我编写 razor 文件,引用这些组件编写界面以及动态操作。

测试代码(Main.razor):


注:目前不支持 HTML 标签 如
 ,现在可以使用 Razor 语法,但是还不能直接使用 HTML。 猜测可能是将 Razor 转换到 Xaml ,所以只能使用里面已经定义好的组件。怎么加入 CSS 也是个问题。这也说明了,不支持那些 js !

而 .NET6 博文中提到的 Blazor desktop apps,看界面样子,应该是网页版本嵌入的。但是目前还不能尝试,所以无法测试,跳过。

blazor-macos-768x508

回顾一下跨平台 UI 应用,主要提到 Xamarin 和 Blazor,而 .NET6 会出现一个新的跨平台 APP UI 框架,叫 MAUI,.NET MAUI是Xamarin.Forms 的演进,这个在 2020 年时就出现了。这个库的目的是统一 Xamarin SDK 到 .NET 中,并且能够与其它项目共享代码(如Blazor)。

目前有两种方式可以尝试 MAUI:

  • Comet MVU
  • Blazor Mobile Bindings

后者已经提到了,MVU 这种读者有兴趣可以自行测试。

还没完,虽然 .NET6 中关于 Blazor - 桌面应用的信息太少,但是我们可以看一下别的框架,例如 LiveSharp。

System.CommandLine

以往我们要执行命令,如在 Linux 上查看进程列表和资源消耗,会使用 top -b -n 1,那么使用 C# 代码表示:

var psi = new ProcessStartInfo("top", "-b -n 1") { RedirectStandardOutput = true };
var proc = Process.Start(psi);

当然还有别的方法,但是似乎有点曲折,并且难以理解。在前面示例代码中,把 top 当作一个进程,然后使用参数启动,但是只适合那种一次性的程序。例如 top 相对于 Windows 中的任务管理器, -n 1 表示打印一次输出就结束,如果直接调用 top 则是一直动态变化,不会主动结束,这时就会导致出现问题。笔者意思是,这种方式不适合交互式的程序或命令行,如果被调用的程序一直不会结束,那么可能给代码带来问题;像 cat /etc/os-releasels -lah 这些命令,都是一次性输出的,很容易处理,不会带来问题。

还要另一种情况就是编写命令行程序。例如笔者就编写一个 dotnet tool 工具,名称为 csys,可以帮助查看主机的一些信息,用户可以输入命令加上参数,然后判断要使用的功能:

    public static class Command
    {
        public const string Info = "info";
    }
    
    Console.WriteLine("请输入命令"); //或者 Main(string[] args) 通过 args 获取
    string command = "";
    command = Console.ReadLine();
    // netinfo
    if (command == Command.NETINFO)
        NETINFO();

这种方法太笨了,但是没有更加好的方法可以处理。

为了更加好地跨平台,.NET6 推出了 System.CommandLine 包,可以更加方便的执行命令和打造命令行程序。

这个库功能比较多,感兴趣的读者可参考:https://github.com/dotnet/command-line-api

通过这个库,我们可以很容易打造出像 wget、curl 这样的命令行程序。

例如,我们 编写了一个 myapp 的命令行程序,用户可以这样执行程序:

$> myapp [parse] --int-option not-an-int --file-option file.txt

要处理这些参数,我们使用 string[]if ,似乎就不太灵活了。System.CommandLine 中有个 Option 可以帮助程序员更加好地处理这些参数:

    // Create a root command with some options
    var rootCommand = new RootCommand
    {
        new Option(
            "--int-option",
            getDefaultValue: () => 42,
            description: "An option whose argument is parsed as an int"),
        new Option(
            "--bool-option",
            "An option whose argument is parsed as a bool"),
        new Option(
            "--file-option",
            "An option whose argument is parsed as a FileInfo")
    };

例如 new Option,表示如果识别到有 --int-option 这个参数,那么后面带的值是数值类型,例如:

--int-option 123

getDefaultValue:() => 42 则设定一个默认值,如果用户启动命令时没有设置,则使用默认值。

如果没有填写这个参数,那么这次 Option 将会使用默认值,例如:

# 不加任何参数
$> myapp

C# 处理这些参数的代码:

   // Note that the parameters of the handler method are matched according to the names of the options
   rootCommand.Handler = CommandHandler.Create((intOption, boolOption, fileOption) =>
    {
        Console.WriteLine($"The value for --int-option is: {intOption}");
        Console.WriteLine($"The value for --bool-option is: {boolOption}");
        Console.WriteLine($"The value for --file-option is: {fileOption?.FullName ?? "null"}");
    });

输出结果:

The value for --int-option is: 42
The value for --bool-option is: False
The value for --file-option is: null

示例代码或程序可参考:https://github.com/dotnet/command-line-api/blob/main/docs/Your-first-app-with-System-CommandLine.md

其它更新

其它一些更新主要是文字方面的,笔者将其中一些比较吸睛的信息整理了一下:

  • Arm64
    .NET5 对 Arm64 版本进行了大量的性能改进,.NET6 继续提升性能;
    计划支持在 Windows Arm64 机器上运行 WPF;
    提供了Apple Silicon(Arm64)芯片(本机和仿真)的支持;

  • 容器(Docker)
    优化了容器中 .NET 程序的性能;
    优化了官方镜像体积(PGO技术);
    各种方式提升启动和吞吐量性能;
    更新了基础镜像的版本;

  • System.Numerics
    一组新的数学 API,提高处理数学的性能和根据硬件提升性能;

  • 改善单文件体积

    发布的二进制文件打包形式可以提升体积大小;但是之前一直说的 AOT 极端优化,还没有出现;

  • Crossgen2
    Roslyn 是 C# 中用于语法分析和编译 C# 代码的 API 集,可以将 C# 代码编译为 .dll;而 crossgen2 可以编译成本机代码而不是 .dll,crossgen2 是 C# 编写的,并且可以自举;crossgen2 仅适用于CoreCLR;

ASP.NET Core

ASP.NET Core 的路线图独立于 .NET,大家可以参考:https://themesof.net/  ,这个网站是 Blazor 编写的,不知道为什么,网页内容加载不出来,体验很不友好呀。也可以看这里获得一些路线计划:https://github.com/dotnet/aspnetcore/issues/27883

.NET6 主要计划内容:

  • 热加载
    开发中可以不需要重新编译,即可对运行中的程序更新 UI 和代码,写 Blazor 和 MVC、API 老方便了;

  • 微型 API

    文档是这样说的:用更少的代码和仪式简化构建API端点。但是查看了 Issue 后,发现这个只是学习或者编写简单的 API 时可以减少没必要的 .dll,缩小体积;

  • 单文件发布
    构建小型,独立的高性能应用程序和服务;

  • WebAssembly 提前(AoT)编译
    发布时将 Blazor WebAssembly 应用程序中的.NET代码直接编译为 WebAssembly,以显着提高运行时性能;这样可以减少一些 .dll 文件;

  • SPA集成

    不懂这个是什么,文档说可与最新的现代前端JavaScript框架无缝协作;

  • Blazor hybrid desktop apps

    前面已经提到过,可以使用 Blazor 跟 MAUI 一起开发 UI 程序;

  • HTTP/3

    支持 HTTP/3;提升支持力度;

下面说一下当前 .NET 6 Preview 1 更新的内容。

  • IAsyncDisposable在MVC中的支持

    现在 IAsyncDisposable 接口,可以在控制器,页面模型和视图组件上实现以异步方式处置资源。

  • DynamicComponent

    DynamicComponent 是一个新的内置 Blazor 组件,可用于动态呈现按类型指定的组件。


可以使用字典将参数传递给渲染的组件:

@code {
    Type someType = ...
    IDictionarymyDictionaryOfParameters = ...
}
  • ElementReference

    ElementReference 是一个对象,用于传递 HTML 元素引用,在 Js 中我们可以使用 document.getElementById('someId') 来定位元素,但是在 Blazor 中许多组件动态组合,很难确定 ID 都是唯一的或者准确定位。为了解决这个问题,Blazor通过 @refelement标签 和ElementReferencestruct 来处理。感兴趣的读者可以查看 Passing HTML element references。
    现在 ElementReference 为 InputCheckboxInputDateInputFileInputNumberInputSelectInputText,和InputTextArea 等输入组件提供了更加方便的处理方式,例如将 UI 焦点设置在这些输入组件上。

  • 可空引用类型注释
    这个是非常好的规范约束,现在 ASP.NET Core 中的各个部分都加上了这些注释,可以更加容易地提升项目的编译安全性。选择使用可为空的注释的项目可能会从ASP.NET Core API中看到新的生成时警告。

另外 EFCore 也进行了一些更新,没啥影响,这里就不提了。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 华为鸿蒙OS精品资料汇总,持续更新中
    华为鸿蒙OS精品资料汇总,持续更新中 1. 鸿蒙OS简介2. 鸿蒙OS重点资料分类整理 /* 12.15: 增加51CTO鸿蒙技术特刊,热烈庆祝本人原创技术文章入选第三期精选! 12.07: 增加 品读鸿蒙HDF架构系列 12.04: 增加【Harmony Go技术沙龙-轻松掌握鸿蒙OS多场景开发】课件分享 增加老板电器、美的的企业现身说法 */ 1. 鸿蒙OS简介 华为在2020.09.10正式发布了HarmonyOS 2.0,引发了IT界学习鸿蒙OS的热潮。本文是对互联网上鸿蒙资料的分类整理。相关资料将会持续更新。 根据官方的定义,HarmonyOS是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备的能力。 2. 鸿蒙OS重点资料分类整理 分类子类描述链接地址00 官方宣传类营销演讲华为开发者大会2020|王成录:连接无限可能-HarmonyOS 2.0发布链接地址.采访独家对话华为王成录:手机 HarmonyOS 开发者 Beta 版将如约而至链接地址.特性千呼万唤始出来,鸿蒙操作系统终发布:分布式架构、支持智能手机的多终端OS链接地址.HDC(PPT汇总)【官方资料】华为开发者大会技术论坛PPT分享链接地
  • 2020优秀Linux发行版本鉴赏
    很多新接触 Linux 的朋友都会从“最好用的Linux”,“最漂亮的Linux”,“用户最多的Linux”等关键字开始,就像很多朋友听音乐时常从“本月排行榜”,“最受欢迎的歌手”开始一样,它是一个快速了解最新动态的方法。至于哪个版本最好,还是要取决于自己的需要。排名不分前后,小编总结的是一些比较热门的发行办法,如果没总结到你喜欢的,欢迎评论区写下自己的最爱~DebianDebian作为最早最老牌的 Linux 发行版之一,是一定要提的,它在创建之初便紧密遵循 GNU 规范并坚守 Unix 和开源自由软件的精神。最大优点是极其稳定快速,同时拥有强大的 APT 包管理机制和丰富的软件源,可以方便地安装和平滑升级软件和系统,省去很多编译安装和版本升级的麻烦。很多人称赞 Debian 系统的代码质量非常高,稳定性出众;加上 Debian 的软件包更新非常及时迅速,而且存量丰富,因此很多知名的网站、网络应用服务的生产服务器上都会采用它。与 CentOS 并称当代建站首选系统。其中最主要的原因是,Debian 拥有被誉为最为强大的软件包管理工具,在 Debian 上无论是安装、卸载还是升级软件,甚至是升级系统版本都非常的简单,比起大多数 Linux 发行版要轻松太多了。Ubuntu目前比较红火的 Linux 发行版本当属 Ubuntu 了吧?它拥有漂亮的 UI 界面,跟 macOS
  • 【Jetpack Compose最新版详解】(持续更新)
    【2020年的第一篇JB】 Jetpack Compose 完全解析(持续更新) 虽然工作了5,6年了,一直也有做笔记的习惯,但是从来没写过什么博客,最近开通了CSDN,打算将自己多年所学,通过博客展现出来,希望能使得自己的基础更加夯实,技术能力更进一步,思维更加缜密,同时能帮助到真正需要帮助的人。(JB :我对技术博客的简称) 1、什么是Compose? 在2019年5月份的 Google I/O 大会上面,Jetpack 团队首次为大家介绍了 Jetpack Compose, Jetpack Compose 是一个用于构建原生Android UI 的现代化工具包。 Compose的特点和优势: 更少的代码 用更少的代码做更多的事情,并避免整个类的错误,因此代码简单易维护。声明式UI 只需描述您的UI,然后Compose会处理其余的工作。随着应用状态的更改,您的用户界面会自动更新。加速开发 与所有现有代码兼容,因此您可以随时随地采用。通过实时预览和完整的Android Studio支持快速进行迭代。强大 通过直接访问Android平台API以及对Material Design,Dark主题,动画等的内置支持,创建美观的应用程序。 详细的了解可以查看官方文档: Jetpack Compose官方介绍:https://developer.android.com/jetpack
  • 你们的2016年前端学习计划是什么
    2015年,软件开发界发生了很多变化。有很多流行的新语言发布了,也有很多重要的框架和工具发布了新版本。下面有一个我们觉得最重要的简短清单,同时也有我们觉得值得你在2016年花时间精力去学习的新事物的一些建议。大趋势在过去的几年里,有一个越来越明显的趋势是web应用的商业逻辑逐步从后端转移到了前端,然后后端变得只需要处理简单的数据API。这就让前端开发框架的选择变得尤为重要了。 另外一个重要的改变是2015年发布的 Edge 浏览器。这是IE的替代品,拥有全新的界面和更好的性能。跟IE不一样的是它同样采用了跟 FireFox 和 Chrome 一样的快速发布策略。这让JavaScript开发者社区能够以周为单位获得最新版JavaScript和 Web标准特性支持而不是像过去一样需要等很多年。语言和平台 Python 3.5 在今年发布了,带来了很多新特性。比如 Asyncio,为你带来了类似 node.js 的事件机制,还有type hints。鉴于Python 3 终于真正地火起来了我们强烈建议你替换掉 Python 2。几乎所有的库都已经支持 Python 3了,所以现在是一个升级历史遗留代码的好时机。 PHP 7 是一个重要的新版本,这个版本修复了很多问题并且带来了新特性和性能提升(看看概览)。 PHP 7 大约比 PHP 5.6 快2倍,这对一些大型项目还有WordPress
  • 木客最新实战课
    下载地址 木客最新实战课 494 - 首门程序员理财课 Python量化交易系统实战[3章]490 - 求老仙-笑傲Java面试:面霸修炼手册487 - Flutter高进阶实战仿哔哩哔哩APP485 - SpringBoot 在线协同办公小程序开发 全栈式项目实战482 - React17+React Hook+TS4 最佳实践仿 Jira 企业项目480 - 迈向高的Java面试突围课478 - 算法面试专题课(Java版)475 - React17 系统精讲 结合TS打造旅游电商平台474 - 甲蛙-Spring Boot + Vue3 前后端分离 实战 wiki 知识库系统473 - 协程原理深度剖析进程线程协程原理一课通472 - 从入门到实战进阶式掌握Vue3完整知识体系467 - 高Redis应用进阶课 一站式Redis解决方案466 - Vue3.0+TS打造企业组件库 前端中高开发者必修课465 - Android 应用程序构建实战+原理精讲464 - Kubernetes 入门到进阶实战463 - C语言系统化精讲重塑你的编程思维461 - 新RabbitMQ精讲,提升工程实践能力,培养架构思维460 - 给Java开发者的实操避坑指南459 - Spark3大数据实时处理-Streaming+Structured Streaming 实战457 -
  • 编写我自己的自动更新器(Writing my own Auto Updater [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 在编写自己的自动更新程序时,应该遵循一个通用框架吗? 不久前,我正在阅读如何创建一个“引导程序”,该程序将在主应用程序之前首先加载(由于文件锁定等原因,无法更新正在运行的应用程序)。 那么有什么技巧/最佳实践吗? 回答1 您可能必须自己编写。 正如FOR所提到的,基本思想是将程序的最新版本(我假设是EXE)放在服务器上,然后在启动时让您的应用与服务器进行检查,如果是较新的版本。 我通常将其实现为应用程序在启动时调用的Web服务。 关于此方法的一些警告: Web服务方法需要获取服务器上EXE的版本号,并将其与调用方的版本号进行比较。 如果使用Assembly类读取服务器EXE的版本号,则只要Web服务实例正在运行(至少20分钟),它将锁定该文件。 因此,有时您可能无法用较新的版本替换服务器上的EXE。 请改用AssemblyName类-这使您无需加载程序集(并锁定程序集)即可读取程序集信息。 调用者应用程序无法用新版本替换其自己的文件-您无法删除或更新正在运行的应用程序文件。 但是,它可以做的是在运行时重命名自己的文件。 因此,自动更新的诀窍是使应用程序重命名(例如,将“ MyApplication.exe”更改为“
  • Android Studio无法渲染布局预览(Android studio not rendering layout preview)
    问题 我一直在使用Android Studio 0.8.6开发应用程序,并且在使用API​​21时在布局预览方面遇到问题。 我收到以下错误: 呈现问题:无法实例化以下类:-android.support.v7.widget.Toolbar 我拥有最新的SDK Build工具(21.0.2)以及已下载并安装的完整API21。 我的targetSDKVersion在gradle文件上设置为21。 如果我将预览更改为使用API​​20进行渲染,则一切似乎都很好。 异常详细信息在下面提供。 谢谢! 异常详细信息java.lang.ClassNotFoundException:android.support.v4.content.ContextCompatApi21 at com.intellij.util.lang.UrlClassLoader.findClass(UrlClassLoader.java:148)at java.lang.ClassLoader.loadClass(ClassLoader.java:424) )的android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:319)的java.lang.ClassLoader.loadClass(ClassLoader.java:357
  • vue-element-admin台前端解决方案: 基于 vue 和 element-ui实现
    介绍 vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现。它使用了最新的前端技术栈,内置了 i18 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。相信不管你的需求是什么,本项目都能帮助到你。 建议 本项目的定位是后台集成方案,不太适合当基础模板来进行二次开发。因为本项目集成了很多你可能用不到的功能,会造成不少的代码冗余。如果你的项目不关注这方面的问题,也可以直接基于它进行二次开发。 集成方案: vue-element-admin基础模板: vue-admin-template桌面终端: electron-vue-adminTypescript 版: vue-typescript-admin-template (鸣谢: @Armour)Others: awesome-project #功能 - 登录 / 注销 - 权限验证 - 页面权限 - 指令权限 - 权限配置 - 二步登录 - 多环境发布 - dev sit stage prod - 全局功能 - 国际化多语言 - 多种动态换肤 - 动态侧边栏(支持多级路由嵌套) - 动态面包屑 - 快捷导航(标签页) - Svg Sprite 图标 - 本地/后端 mock 数据 - Screenfull全屏 -
  • 更新Excel加载项的过程?(Process for updating Excel add-in?)
    问题 我在一个部门中部署了一个Excel 2003加载项,偶尔需要更新。 当前发生的事情是,我将新版本从计算机发布到中央位置,这会更新存储在数据库中的版本号,每次运行该插件时,外接程序都会检查该版本号,以及是否有较新的版本号找到该插件后,该插件将暂停并显示一条消息,通知用户他们需要更新该插件。 当前,这涉及到他们使用更改外接程序的workbook_open事件运行另一个工作workbook_open 。 我想要的是外接程序检测到有较新的版本可用,并在继续进行用户操作之前以静默方式安装它。 问题在于,这在卸载现有版本的第一步上失败,因为在卸载外接程序时,外接程序中的所有代码都会立即完成。 我会即时在用户的personal.xls中创建一些代码来处理转换,但是我无法在用户的计算机中设置“对Visual Basic项目的信任访问”标志,因此无法在加入。 我从这里可以看到的唯一方法是拥有两个加载项,一个加载项处理更新,一个实际完成工作。 当我不可避免地必须更新更新加载项时,问题就来了! 其他人可以提出更好的解决方案吗? 这必须是100%Excel,没有VSTO等。 回答1 我们使用一个单独的插件作为引导程序。 主要插件可以更新引导程序如果主加载项需要更新,则它将加载引导程序,然后使用OnTime调用来安排对引导程序中的引导程序例程的调用,并立即将其自身卸载。 准时呼叫执行。
  • 新项目的angularJS vs angular 2 [已关闭](angularJS vs angular 2 for new project [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我正在准备为我的Scala应用程序构建UI。 我对Angular 1非常了解,而对Angular 2则了解甚少。 我要问的问题是,我是否应将Angular 2用于新应用程序而不是Angular 1。 我在google上搜索并阅读了几篇关于我已经知道的有关Angular 2 vs Angular 1的文章,但是我对专家对此主题的看法更感兴趣。 我在这里提出问题的原因是,此主题在前两页中没有任何答案。 此时我的应用程序并不大,而且不会那么大。 那么我应该坚持使用Angular 1还是选择Angular 2? 为什么? 回答1 对于全新项目,我们处于相同的情况。 我们决定坚持使用Angular 1,因为: 快进。 我们的截止日期很短。 我们必须交付,并且我们知道如何使用Angular 1做到这一点。 Angular 1已准备好生产。 虽然Angular 2没问题,但是在Angular 2周围都是。 ui-router在alpha中,Angular 2中不存在某些模块。 高架。 与oclazyload相比,AMD或SystemJS具有巨大的开销。 我们没有开箱即用的知识如何减少Angular 2的重量
  • 已支持macOS Big Sur 的apple App更新列表
    随着 macOS Big Sur 的发布,苹果终于将其桌面操作系统的大版本号升级到了 11 。据悉,一旦安装了 macOS Big Sur,软件更新就会在后台开始,并且更新速度会比以往更快,让系统软件随时保持最新且安全。 今天为大家整理了支持macOS Big Sur 的apple App更新列表,如果你已经升级了新系统,那么就来看看遗漏了哪些软件的更新吧! Final Cut Pro10.5 Final Cut Pro 10.5启用了全新的矩形图标,与macOS Big Sur风格统一。经过完整而彻底的重新设计后,为后期制作工作流程的方方面面增添了无与伦比的速度、质量和灵活性。Final Cut Pro 将革命性的视频编辑与强大的媒体整理和难以置信的性能相结合,可让您极速创作。 新版本提高了在搭载 Apple 芯片的 Mac 电脑上的性能和效率。 Final Cut Pro X for Mac(fcpx视频剪辑) 立即下载 Final Cut Pro X for Mac(fcpx视频剪辑) Final Cut Pro for Mac 是Mac系统平台上一款由苹果公司开发专业视频非线性编辑器,经过彻底的重新设计后,Final Cut Pro 将革命性的视频编辑与强大的媒体整理和难以置信的性能相结合,可让您极速创作。 2020-11-142.7 GB简体中文 Logic Pro 10
  • 技术干货 | mPaaS 小程序高玩带你起飞:客户端预置小程序无视网络质量
    传统的小程序技术容易受到网络环境影响,当网络质量不佳时可能导致拉取不到小程序包的情况。通过预置小程序,即可规避该问题。本文介绍了预置小程序的原理和预置小程序的实现过程。什么是预置小程序预置小程序是指将小程序的渲染、逻辑、配置等静态资源打包在一个压缩包内,客户端预先下载小程序包到本地、直接从本地加载资源的过程。预置小程序可以最大程度地摆脱网络环境对 mPaaS 小程序页面的影响。使用预置包能够为客户端带来以下优势:提升用户体验通过预置包的方式把页面内静态资源嵌入到应用中并随应用一起发布,可以使用户第一次开启应用时即无需依赖网络环境下载资源,可以直接开始使用。实现动态更新在推出新版本或紧急发布的时候,可以在小程序 IDE 中进行迭代开发,通过 mPaaS 控制台发布,客户端中集成的小程序 SDK 会自动将小程序更新到最新的版本。这种发布无需通过应用商店审核,可以让用户及早接收到更新。预置小程序的实现原理本文从以下方面介绍了预置小程序的实现原理:小程序预置包的结构小程序预置包的使用过程小程序预置包的结构小程序预置包是一个 .amr 格式的压缩文件,将后缀 amr 改成 zip 解压缩后,可以看到其中包含的 HTML 资源和 JavaScript 代码等。待小程序容器加载后,这些资源和代码能在 UC 内核渲染。以 Android 系统为例,下图显示了一般资源包的目录结构:一级目录
  • 全方位带你解读软件测试分类
    软件测试方法种类繁多,记忆起来也非常混乱, 如果把软件测试方法进行多个维度的分类, 就会清晰很多。 软件测试的分类-按开发阶段分类 1、单元测试 又称模块测试,针对软件设计中的最小单位-程序模块,进行正确性检查的测试工作。单元测试需要从程序内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。 单元定义:C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指一个窗口,1个菜单。 2、集成测试 又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。 3、系统测试 指的是将整个软件系统看为一个整体进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。 系统测试在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境中的兼容性等。 软件测试的分类-验收测试的分类 1、α测试 Alpha 是内测版本,即现在所说的CB。 此版本表示该软件仅仅是一个初步完成品, 通常只在软件开发者内部交流, 也有很少一部分发布给专业测试人员。 一般而言, 该版本软件的bug 较多, 普通用户最好不要安装。 2、β测试 Beta是公测版本,是对所有用户开放的测试版本。 该版本相对于α 版已有了很大的改进,消除了严重的错误, 但还是存在着一些缺陷
  • Python编写的桌面图形界面程序实现更新检测和下载安装
    在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter 、强大的 PyQt5 和 PySide2 ,还有 wxPython 。借助这些或内置或第三方的模块,我们可以轻松地编写跨平台的桌面图形界面程序。 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:1097524789 同时,我们还能直接使用 PyInstaller 、 Nuitka 、 cx_Freeze 等 Python 第三方程序打包模块,将编写好桌面图形界面程序打包为各个平台的二进制可执行程序文件,比如 Windows 下的 exe 程序执行文件。 通常我们会将程序按需打包为单个的 exe可执行文件 或包含整个文件夹的可执行文件。 文章目录 程序更新 随着版本的迭代和功能的优化,我们编写的程序会需要进行更新。 在 Web 应用中,这个问题几乎不需要处理,因为只要服务器更新了,浏览器打开的页面或功能都将是最新的。 而在桌面图形界面程序中,则有点棘手。因为我们打包好的程序都是离线分发的,按照以往的流程,我们需要重新打包程序,然后,在某个页面放上新版本程序的下载链接
  • C ++是否有任何“开箱即用”的2D / 3D绘图库? [关闭](Is there any 'out-of-the-box' 2D/3D plotting library for C++? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 6年前关闭。 改善这个问题 我研究了在交互式窗口中绘制函数(或其他类型的图形)的不同选项。 我主要使用wxWidgets,但会接受任何其他“接口”。 查看可用的内容,这是我发现的内容: wxPlot :自2006年以来未更新。但是如果它是...,它将是一个不错的选择。 wxMathPlot :非常新,不成熟,功能很少(仍处于活动状态?) libgraph :已过时,不是重绘,仅2D,仅输出图像。 koolplot :太基本了,无法控制创建的窗口。 EasyBMP :非常基本,仅输出图像。 plotutils :仅命令行。 plplot :几乎不维护C和C ++ API。 实际上,wxPlot是基于此的。 如果我们更新了C和C ++接口,也可能是候选对象。 任何意见? 有想法吗? 谢谢! 回答1 即使此线程较旧,但还是很重要的。 强烈建议您使用QCustomPlot来补充此列表。 回答2 MathGL具有多种绘图类型,C / Fortran接口和基本数据分析 回答3 对于这些需求,我全都以ROOT为目标。 但是,如果您不需要所有分析支持,则非常麻烦。 回答4 您有成熟的Qwt。 某个地方潜伏着3D版本。 但是,我从未对美学结果感到满意。
  • 插件太旧,请更新到较新版本,或将ANDROID_DAILY_OVERRIDE环境变量设置为(Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to)
    问题 今天,我刚刚从Android SDK中导入了一个示例应用程序作为项目中的模块(分析),当我尝试对其进行同步时,突然出现了gradle错误: Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE envrinment variable to... 这是我的应用程序gradle文件: apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.0" defaultConfig { applicationId "xxx.xxxxxx.xxxxx" versionCode 1 versionName '1' minSdkVersion 9 targetSdkVersion 22 versionCode 1 versionName '1' } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dependencies {
  • 前端学习路线
    文章目录 前端模板下载Html+cssHtml+css 基础教程Html+css 实战教程 JQueryJQuery视频教程 JavaScriptJavaScript基础教程JavaScript实战教程 AjaxAjax教程 BootStrapBootStrap基础教程BootStrap实战教程BootStrap模板BootStrap文档教程 LayUiLayUi教程 ES6ES6基础教程 EchartsEcharts基础教程Echarts实战教程 百度地图学习AngularAngular教程 Node.jsNode.js基础教程Node.js实战教程 React(推荐的视频有可能一样,但是要有没有资料)React基础教程React实战教程 WebpackWebpack教程 AxiosAxios教程 Vue(重中之重)Vue基础教程Vue实战教程 APP开发APP开发教程 微信小程序开发微信小程序基础教程微信小程序实战教程 微信公众号开发微信公众号开发教程 项目实战 推荐学习1 推荐学习2 推荐学习3 前端模板下载 https://www.mycodes.net/search.php?keyword=%D7%A2%B2%E1 滑动的登录注册页面 HTML5实例推荐 Html+css Html+css 基础教程 网页高级编程(青鸾云) HTML+CSS 基础入门教程全套视频 |
  • Spring Boot 要怎么学?要学哪些东西?要不要先学 SSM?松哥说说看法
    可能很多刚接触 Spring Boot 的小伙伴都会有这样的疑问,Spring Boot 要怎么学,要不要先学 SSM?今天结合自己的经验,和大家说一说我的看法,也顺便推荐几个 Spring Boot 学习资料。 1.Spring Boot 是什么 我们刚开始学习 JavaWeb 的时候,使用 Servlet/JSP 做开发,一个接口搞一个 Servlet ,很头大,后来我们通过隐藏域或者反射等方式,可以减少 Servlet 的创建,但是依然不方便。 再后来,我们引入 Struts2/SpringMVC 这一类的框架,来简化我们的开发 ,和 Servlet/JSP 相比,引入框架之后,生产力确实提高了不少,但是用久了,又发现了新的问题,即配置繁琐易出错,要做一个新项目,先搭建环境,环境搭建来搭建去,就是那几行配置,不同的项目,可能就是包不同,其他大部分的配置都是一样的。 Java 总是被人诟病配置繁琐代码量巨大,这就是其中一个表现。那么怎么办?Spring Boot 应运而生,Spring Boot 是 Pivotal 团队在 2013 年开始研发的一个基于 Spring 的全新框架,试图将 Spring 中臃肿的配置进行简化,使 Java 开发更加轻量与快速,这个框架非常活跃,官方也非常重视。 Spring Boot 主要提供了如下功能: 为所有基于 Spring 的 Java
  • C#9.0 终于来了,带你一起解读Pattern matching 和 nint 两大新特性玩法
    一:背景 1. 讲故事 上一篇跟大家聊到了Target-typed new 和 Lambda discard parameters,看博客园和公号里的阅读量都达到了新高,甚是欣慰,不管大家对新特性是多头还是空头,起码还是对它抱有一种极为关注的态度,所以我的这个系列还得跟,那就继续开撸吧,今天继续带来两个新特性,更多新特性列表,请大家关注:新特性预览 二:新特性研究 1. Native ints 从字面上看貌似是什么原生类型ints,有点莫名其妙,还是看一看Issues上举得例子吧: Summary: nint i = 1; and nuint i2 = 2; Shipped in preview in 16.7p1. 有点意思,还是第一次看到有nint这么个东西,应该就是C#9新增的关键词,好奇心爆棚,快来实操一下。 static void Main(string[] args) { nint i = 10; Console.WriteLine($"i={i}"); } 从图中看,可以原样输出,然后用ILSpy查查底层IL代码,发现连IL代码都不用看😁😁😁。如下图: 从图中看原来nint就是IntPtr结构体哈,如果你玩过 C# 到 C++ 之间的互操作,我相信你会对Ptr再熟悉不过了,从这个nint上看,你不觉得C#团队对指针操作是前所未有的重视吗? 前有指针类型IntPtr
  • pytorch——训练第一个分离器讲解_pytorch快速入门路径
    参考了黄海广老师的pytorch入门资料 黄海广:带你少走弯路:强烈推荐的Pytorch快速入门资料和翻译(可下载)​zhuanlan.zhihu.com 结合自身从0到1的学习经历,写下此pytorch入门路径 本路径适合人群:深度学习初学者,深度学习框架初学者 欢迎拥抱最美DL框架 1. [莫烦pytorch系列教程] Pytorch 教程系列 | 莫烦Python​morvanzhou.github.io 莫烦的这套视频一集最长也就15min,大多都是5分钟左右,莫烦哥哥风趣幽默,内容浅显易懂,直接上手,适合对pytorch有个基本了解。一天即可刷完并练习完。 目录: - pytorch简介 - pytorch神经网络基础 - 建立第一个神经网络 - 高级神经网络结构 - 高阶内容 参考笔记: zwkkk/pytorch​github.com 2.自己搭建resnet18 实现mnist分类 学了当然得赶紧用啦 [resnet18] zwkkk/pytorch​github.com 3.在练习尝试中熟练提高 推荐flyai平台,他们的GPU资源真的很诱人,非常感谢flyai平台给没有GPU资源的小白提供了练手的机会。 [通过flyai平台 细胞图像分类-疟疾病诊断赛题进行pytorch练习] zwkkk/pytorch-project-exercise​github.com