品|开源中国
文|局长
微软宣布 .NET 6 已正式推出,并称其为迄今为止最快的 .NET 版本。
发布公告提到,.NET 6 是首个原生支持 Apple Silicon (Arm64) 的版本,并且还针对 Windows Arm64 进行了改进。.NET 团队构建了一个新的动态配置文件引导优化 (PGO) 系统,该系统可提供仅在运行时才会进行的深度优化。其他变化包括使用 dotnet monitor 和 OpenTelemetry 改进云诊断、提供更强大和更高效的 WebAssembly 支持,以及添加用于 HTTP/3、JSON 处理、数学和直接操作内存的新 API。
作为 LTS 长期支持版本,.NET 6 将会获得 3 年的技术支持。
在 .NET 6 开发周期内,总共包含大约一万个 commit,下面简要介绍新版本的亮点变化。
.NET 6 亮点
使用 Microsoft 服务、其他公司运行的云应用程序和开源项目进行了生产压力测试。
作为最新的长期支持 (LTS) 版本提供三年的技术支持
跨浏览器、云、桌面、IoT 和移动应用程序的统一平台,全部使用相同的 .NET 库,可便捷地共享代码。
性能全面提升,尤其是文件 I/O 的性能,减少了执行时间、等待时间和内存使用。
C# 10 带来了语言改进,例如记录结构 (record structs)、隐式使用和新的 lambda 功能,同时编译器添加了增量源代码生成器。 F# 6 新特性包括基于 task 的异步、管道调试和多项性能改进。
Visual Basic 在 Visual Studio 体验和 Windows Forms 项目打开体验方面进行了改进。
热重载 (Hot Reload) 支持跳过重新构建和重新启动以查看新更改(当应用程序正处于运行状态),此特性支持在 Visual Studio 2022 中使用,并通过 .NET CLI 为 C# 和 Visual Basic 提供了支持。
云诊断已通过 OpenTelemetry 和 dotnet monitor 进行改进,现在在生产环境中得到支持,并且可用于 Azure 应用服务。
JSON API 更强大,并提供源代码生成器器用于串行更高的性能。
ASP.NET Core 引入了最少的 API,以简化入门体验并提升 HTTP 服务的性能。
Blazor 组件现在可以从 JavaScript 渲染并与现有的基于 JavaScript 的应用程序集成。
用于 Blazor WebAssembly (Wasm) 应用程序的 WebAssembly AOT 编译,以及对运行时重新链接和本机依赖项的支持。
使用 ASP.NET Core 构建的单页应用程序现在使用了更灵活的模式,可以与 Angular、React 和其他流行的前端 JavaScript 框架一起使用。
添加了 HTTP/3 以便 ASP.NET Core、HttpClient 和 gRPC 都可以与 HTTP/3 客户端和服务器交互。
文件 IO 现在支持符号链接,并通过从头开始重新编写FileStream大幅提升了性能。
通过支持 OpenSSL 3、ChaCha20Poly1305 加密方案和运行时纵深防御缓解措施(特别是W^X和CET),安全性得到了提升。
支持为 Linux、macOS 和 Windows(以前仅适用于 Linux)发布单文件应用程序。
IL 修剪现在更加强大和有效,提供了新的警告和分析器,可确保正确的最终结果。
添加了源代码生成器和分析器,可帮助生成更好、更安全和更高性能的代码。
源代码构建使 Red Hat 等组织能够从源代码构建 .NET,并向其用户提供自己的构建版本。
文介绍通过C#和VB.NET代码展示将Html转为Excel文档的方法。
方法1
将 Spire.XLS for .NET (https://www.e-iceblue.cn/Downloads/Spire-XLS-NET.html)下载到本地,解压,安装。完成安装后,在安装路径下找到BIN文件夹下的Spire.Xls.dll。然后在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的dll文件添加引用至程序。
方法2
通过 NuGet 安装。可以通过以下2种方法安装:
1.可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“Spire.XLS”,点击“安装”。等待程序安装完成。
2.将以下内容复制到PM控制台安装。
Install-Package Spire.XLS -Version 12.3.2
C#
using Spire.Xls;
namespace HtmlToExcel
{
class Program
{
static void Main(string[] args)
{
//加载示例文档
Workbook workbook=new Workbook();
workbook.LoadFromHtml("test.html");
//自适应行高
Worksheet sheet=workbook.Worksheets[0];
sheet.AllocatedRange.AutoFitRows();
//保存文档
workbook.SaveToFile("HtmlToExcel.xlsx", FileFormat.Version2013);
}
}
}
转换效果:
—END—
请大家转发+评论,希望能帮助更大的水粉们。
家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
Jint 是 .NET 的 Javascript 解释器,可以在任何现代 .NET 平台上运行,支持 .NET Standard 2.0 和 .NET 4.6.2 目标(及更高版本)。在性能方面,Jint 也是非常优秀:
Jint 可以适应以下典型场景:
Jint 的一些用户包括 RavenDB、EventStore、OrchardCore、ELSA Workflows、docfx、JavaScript Engine Switcher 等等。
目前 Jint 在 Github 通过 BSD-2-Clause 协议开源,有超过 3.7k 的 star,1k 的 fork、1.7k 的项目依赖量,是一个值得关注的开源项目。
下面示例定义了一个名为 log 的新值,该值指向 Console.WriteLine,然后运行一个调用 log('Hello World!') 的脚本。
var engine=new Engine()
.SetValue("log", new Action<object>(Console.WriteLine));
engine.Execute(@"
function hello() {
log('Hello World');
};
hello();
");
变量 x 设置为 3,并且 x * x 在 JavaScript 中计算。结果直接返回到 .NET,在本例中为双精度值 9。
var square=new Engine()
.SetValue("x", 3) // define a new variable
.Evaluate("x * x") // evaluate a statement
.ToObject(); // converts the value to .NET
还可以直接传递 POCO 或匿名对象并从 JavaScript 使用。例如,在此示例中,一个新的 Person 实例是通过 JavaScript 操作的。
var p=new Person {
Name="Mickey Mouse"
};
var engine=new Engine()
.SetValue("p", p)
.Execute("p.Name='Minnie'");
Assert.AreEqual("Minnie", p.Name);
可以调用 JavaScript 函数引用:
var add=new Engine()
.Execute("function add(a, b) { return a + b; }")
.GetValue("add");
add.Invoke(1, 2); // -> 3
或者通过函数名称调用:
var engine=new Engine()
.Execute("function add(a, b) { return a + b; }");
engine.Invoke("add", 1, 2); // -> 3
开发者可以通过如下配置引擎实例来允许引擎访问任何 .NET 类:
var engine=new Engine(cfg=> cfg.AllowClr());
然后就可以将系统命名空间作为全局值进行访问。以下是它在命令行实用程序上下文中的使用方式:
jint> var file=new System.IO.StreamWriter('log.txt');
jint> file.WriteLine('Hello World !');
jint> file.Dispose();
如果不想使用计算机的默认值,则可以在使用区域设置 JavaScript 方法时强制引擎应使用的时区或文化,下面示例强制将时区设置为太平洋标准时间。
var PST=TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var engine=new Engine(cfg=> cfg.LocalTimeZone(PST));
engine.Execute("new Date().toString()"); // Wed Dec 31 1969 16:00:00 GMT-08:00
下面示例使用法语作为默认区域性:
var FR=CultureInfo.GetCultureInfo("fr-FR");
var engine=new Engine(cfg=> cfg.Culture(FR));
engine.Execute("new Number(1.23).toString()"); // 1.23
engine.Execute("new Number(1.23).toLocaleString()"); // 1,23
可以使用模块从多个脚本文件导入和导出变量:
var engine=new Engine(options=>
{
options.EnableModules(@"C:\Scripts");
})
var ns=engine.Modules.Import("./my-module.js");
var value=ns.Get("value").AsString();
默认情况下,模块解析算法将仅限于 EnableModules 中指定的基本路径,并且没有包支持。但是,开发者可以通过两种方式提供自己的包。 使用 JavaScript 源代码定义模块:
engine.Modules.Add("user", "export const name='John';");
var ns=engine.Modules.Import("user");
var name=ns.Get("name").AsString();
或者使用模块构建器定义模块,其允许从 .NET 导出 CLR 类和值:
// Create the module 'lib' with the class MyClass and the variable version
engine.Modules.Add("lib", builder=> builder
.ExportType<MyClass>()
.ExportValue("version", 15)
);
// Create a user-defined module and do something with 'lib'
engine.Modules.Add("custom", @"
import {MyClass, version} from 'lib';
const x=new MyClass();
export const result as x.doSomething();
");
// Import the user-defined module; this will execute the import chain
var ns=engine.Modules.Import("custom");
// The result contains "live" bindings to the module
var id=ns.Get("result").AsInteger();
以下功能为开发者提供了一个安全的沙盒环境来运行用户脚本:
本文主要和大家介绍 Jint ,其是 .NET 的 Javascript 解释器,可以在任何现代 .NET 平台上运行,支持 .NET Standard 2.0 和 .NET 4.6.2 目标(及更高版本)。因为篇幅问题,关于 Jint 主题只是做了一个简短的介绍,但是文末的参考资料提供了大量优秀文档以供学习,如果有兴趣可以自行阅读。如果大家有什么疑问欢迎在评论区留言。
https://github.com/sebastienros/jint
https://blog.devgenius.io/a-javascript-rules-engine-in-net-6-fb092cdc44c
https://github.com/topics/jint
*请认真填写需求信息,我们会在24小时内与您取得联系。