品|開源中國
文|局長
微軟宣布 .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小時內與您取得聯系。