Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
品|開源中國
文|局長
微軟宣布 .NET 6 已正式推出,并稱其為迄今為止最快的 .NET 版本。
發(fā)布公告提到,.NET 6 是首個(gè)原生支持 Apple Silicon (Arm64) 的版本,并且還針對 Windows Arm64 進(jìn)行了改進(jìn)。.NET 團(tuán)隊(duì)構(gòu)建了一個(gè)新的動態(tài)配置文件引導(dǎo)優(yōu)化 (PGO) 系統(tǒng),該系統(tǒng)可提供僅在運(yùn)行時(shí)才會進(jìn)行的深度優(yōu)化。其他變化包括使用 dotnet monitor 和 OpenTelemetry 改進(jìn)云診斷、提供更強(qiáng)大和更高效的 WebAssembly 支持,以及添加用于 HTTP/3、JSON 處理、數(shù)學(xué)和直接操作內(nèi)存的新 API。
作為 LTS 長期支持版本,.NET 6 將會獲得 3 年的技術(shù)支持。
在 .NET 6 開發(fā)周期內(nèi),總共包含大約一萬個(gè) commit,下面簡要介紹新版本的亮點(diǎn)變化。
.NET 6 亮點(diǎn)
使用 Microsoft 服務(wù)、其他公司運(yùn)行的云應(yīng)用程序和開源項(xiàng)目進(jìn)行了生產(chǎn)壓力測試。
作為最新的長期支持 (LTS) 版本提供三年的技術(shù)支持
跨瀏覽器、云、桌面、IoT 和移動應(yīng)用程序的統(tǒng)一平臺,全部使用相同的 .NET 庫,可便捷地共享代碼。
性能全面提升,尤其是文件 I/O 的性能,減少了執(zhí)行時(shí)間、等待時(shí)間和內(nèi)存使用。
C# 10 帶來了語言改進(jìn),例如記錄結(jié)構(gòu) (record structs)、隱式使用和新的 lambda 功能,同時(shí)編譯器添加了增量源代碼生成器。 F# 6 新特性包括基于 task 的異步、管道調(diào)試和多項(xiàng)性能改進(jìn)。
Visual Basic 在 Visual Studio 體驗(yàn)和 Windows Forms 項(xiàng)目打開體驗(yàn)方面進(jìn)行了改進(jìn)。
熱重載 (Hot Reload) 支持跳過重新構(gòu)建和重新啟動以查看新更改(當(dāng)應(yīng)用程序正處于運(yùn)行狀態(tài)),此特性支持在 Visual Studio 2022 中使用,并通過 .NET CLI 為 C# 和 Visual Basic 提供了支持。
云診斷已通過 OpenTelemetry 和 dotnet monitor 進(jìn)行改進(jìn),現(xiàn)在在生產(chǎn)環(huán)境中得到支持,并且可用于 Azure 應(yīng)用服務(wù)。
JSON API 更強(qiáng)大,并提供源代碼生成器器用于串行更高的性能。
ASP.NET Core 引入了最少的 API,以簡化入門體驗(yàn)并提升 HTTP 服務(wù)的性能。
Blazor 組件現(xiàn)在可以從 JavaScript 渲染并與現(xiàn)有的基于 JavaScript 的應(yīng)用程序集成。
用于 Blazor WebAssembly (Wasm) 應(yīng)用程序的 WebAssembly AOT 編譯,以及對運(yùn)行時(shí)重新鏈接和本機(jī)依賴項(xiàng)的支持。
使用 ASP.NET Core 構(gòu)建的單頁應(yīng)用程序現(xiàn)在使用了更靈活的模式,可以與 Angular、React 和其他流行的前端 JavaScript 框架一起使用。
添加了 HTTP/3 以便 ASP.NET Core、HttpClient 和 gRPC 都可以與 HTTP/3 客戶端和服務(wù)器交互。
文件 IO 現(xiàn)在支持符號鏈接,并通過從頭開始重新編寫FileStream大幅提升了性能。
通過支持 OpenSSL 3、ChaCha20Poly1305 加密方案和運(yùn)行時(shí)縱深防御緩解措施(特別是W^X和CET),安全性得到了提升。
支持為 Linux、macOS 和 Windows(以前僅適用于 Linux)發(fā)布單文件應(yīng)用程序。
IL 修剪現(xiàn)在更加強(qiáng)大和有效,提供了新的警告和分析器,可確保正確的最終結(jié)果。
添加了源代碼生成器和分析器,可幫助生成更好、更安全和更高性能的代碼。
源代碼構(gòu)建使 Red Hat 等組織能夠從源代碼構(gòu)建 .NET,并向其用戶提供自己的構(gòu)建版本。
文介紹通過C#和VB.NET代碼展示將Html轉(zhuǎn)為Excel文檔的方法。
方法1
將 Spire.XLS for .NET (https://www.e-iceblue.cn/Downloads/Spire-XLS-NET.html)下載到本地,解壓,安裝。完成安裝后,在安裝路徑下找到BIN文件夾下的Spire.Xls.dll。然后在Visual Studio中打開“解決方案資源管理器”,鼠標(biāo)右鍵點(diǎn)擊“引用”,“添加引用”,將本地路徑BIN文件夾下的dll文件添加引用至程序。
方法2
通過 NuGet 安裝。可以通過以下2種方法安裝:
1.可以在Visual Studio中打開“解決方案資源管理器”,鼠標(biāo)右鍵點(diǎn)擊“引用”,“管理NuGet包”,然后搜索“Spire.XLS”,點(diǎn)擊“安裝”。等待程序安裝完成。
2.將以下內(nèi)容復(fù)制到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");
//自適應(yīng)行高
Worksheet sheet=workbook.Worksheets[0];
sheet.AllocatedRange.AutoFitRows();
//保存文檔
workbook.SaveToFile("HtmlToExcel.xlsx", FileFormat.Version2013);
}
}
}
轉(zhuǎn)換效果:
—END—
請大家轉(zhuǎn)發(fā)+評論,希望能幫助更大的水粉們。
家好,很高興又見面了,我是"高級前端?進(jìn)階?",由我?guī)е蠹乙黄痍P(guān)注前端前沿、深入前端底層技術(shù),大家一起進(jìn)步,也歡迎大家關(guān)注、點(diǎn)贊、收藏、轉(zhuǎn)發(fā)!
Jint 是 .NET 的 Javascript 解釋器,可以在任何現(xiàn)代 .NET 平臺上運(yùn)行,支持 .NET Standard 2.0 和 .NET 4.6.2 目標(biāo)(及更高版本)。在性能方面,Jint 也是非常優(yōu)秀:
Jint 可以適應(yīng)以下典型場景:
Jint 的一些用戶包括 RavenDB、EventStore、OrchardCore、ELSA Workflows、docfx、JavaScript Engine Switcher 等等。
目前 Jint 在 Github 通過 BSD-2-Clause 協(xié)議開源,有超過 3.7k 的 star,1k 的 fork、1.7k 的項(xiàng)目依賴量,是一個(gè)值得關(guān)注的開源項(xiàng)目。
下面示例定義了一個(gè)名為 log 的新值,該值指向 Console.WriteLine,然后運(yùn)行一個(gè)調(diào)用 log('Hello World!') 的腳本。
var engine=new Engine()
.SetValue("log", new Action<object>(Console.WriteLine));
engine.Execute(@"
function hello() {
log('Hello World');
};
hello();
");
變量 x 設(shè)置為 3,并且 x * x 在 JavaScript 中計(jì)算。結(jié)果直接返回到 .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 使用。例如,在此示例中,一個(gè)新的 Person 實(shí)例是通過 JavaScript 操作的。
var p=new Person {
Name="Mickey Mouse"
};
var engine=new Engine()
.SetValue("p", p)
.Execute("p.Name='Minnie'");
Assert.AreEqual("Minnie", p.Name);
可以調(diào)用 JavaScript 函數(shù)引用:
var add=new Engine()
.Execute("function add(a, b) { return a + b; }")
.GetValue("add");
add.Invoke(1, 2); // -> 3
或者通過函數(shù)名稱調(diào)用:
var engine=new Engine()
.Execute("function add(a, b) { return a + b; }");
engine.Invoke("add", 1, 2); // -> 3
開發(fā)者可以通過如下配置引擎實(shí)例來允許引擎訪問任何 .NET 類:
var engine=new Engine(cfg=> cfg.AllowClr());
然后就可以將系統(tǒng)命名空間作為全局值進(jìn)行訪問。以下是它在命令行實(shí)用程序上下文中的使用方式:
jint> var file=new System.IO.StreamWriter('log.txt');
jint> file.WriteLine('Hello World !');
jint> file.Dispose();
如果不想使用計(jì)算機(jī)的默認(rèn)值,則可以在使用區(qū)域設(shè)置 JavaScript 方法時(shí)強(qiáng)制引擎應(yīng)使用的時(shí)區(qū)或文化,下面示例強(qiáng)制將時(shí)區(qū)設(shè)置為太平洋標(biāo)準(zhǔn)時(shí)間。
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
下面示例使用法語作為默認(rèn)區(qū)域性:
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
可以使用模塊從多個(gè)腳本文件導(dǎo)入和導(dǎo)出變量:
var engine=new Engine(options=>
{
options.EnableModules(@"C:\Scripts");
})
var ns=engine.Modules.Import("./my-module.js");
var value=ns.Get("value").AsString();
默認(rèn)情況下,模塊解析算法將僅限于 EnableModules 中指定的基本路徑,并且沒有包支持。但是,開發(fā)者可以通過兩種方式提供自己的包。 使用 JavaScript 源代碼定義模塊:
engine.Modules.Add("user", "export const name='John';");
var ns=engine.Modules.Import("user");
var name=ns.Get("name").AsString();
或者使用模塊構(gòu)建器定義模塊,其允許從 .NET 導(dǎo)出 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();
以下功能為開發(fā)者提供了一個(gè)安全的沙盒環(huán)境來運(yùn)行用戶腳本:
本文主要和大家介紹 Jint ,其是 .NET 的 Javascript 解釋器,可以在任何現(xiàn)代 .NET 平臺上運(yùn)行,支持 .NET Standard 2.0 和 .NET 4.6.2 目標(biāo)(及更高版本)。因?yàn)槠鶈栴},關(guān)于 Jint 主題只是做了一個(gè)簡短的介紹,但是文末的參考資料提供了大量優(yōu)秀文檔以供學(xué)習(xí),如果有興趣可以自行閱讀。如果大家有什么疑問歡迎在評論區(qū)留言。
https://github.com/sebastienros/jint
https://blog.devgenius.io/a-javascript-rules-engine-in-net-6-fb092cdc44c
https://github.com/topics/jint
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。