整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          .NET 6 正式發布,迄今為止最快的 .NET

          .NET 6 正式發布,迄今為止最快的 .NET

          品|開源中國

          文|局長

          微軟宣布 .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文檔的方法。

          dll引用

          方法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

          將HTML轉為Excel

          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—

          請大家轉發+評論,希望能幫助更大的水粉們。

          家好,很高興又見面了,我是"高級前端?進階?",由我帶著大家一起關注前端前沿、深入前端底層技術,大家一起進步,也歡迎大家關注、點贊、收藏、轉發!

          1.什么是 Jint

          Jint 是 .NET 的 Javascript 解釋器,可以在任何現代 .NET 平臺上運行,支持 .NET Standard 2.0 和 .NET 4.6.2 目標(及更高版本)。在性能方面,Jint 也是非常優秀:

          • 由于 Jint 既不生成任何 .NET 字節碼也不使用 DLR,因此可以非常快地運行相對較小的腳本
          • 如果重復運行相同的腳本,則應該緩存 Esprima 生成的腳本或模塊實例并將其提供給 Jint 而不是內容字符串
          • 更適合在嚴格模式下運行引擎,可以提高性能

          Jint 可以適應以下典型場景:

          • 在安全的沙盒環境中在 .NET 應用程序內運行 JavaScript
          • 將本機 .NET 對象和函數公開給 JavaScript 代碼,以 JSON 形式獲取數據庫查詢結果、調用 .NET 方法等
          • 支持 .NET 應用程序中的腳本編寫,允許用戶使用 JavaScript 自定義應用程序(如 Unity 游戲)

          Jint 的一些用戶包括 RavenDB、EventStore、OrchardCore、ELSA Workflows、docfx、JavaScript Engine Switcher 等等。

          目前 Jint 在 Github 通過 BSD-2-Clause 協議開源,有超過 3.7k 的 star,1k 的 fork、1.7k 的項目依賴量,是一個值得關注的開源項目。

          2.如何使用 Jint

          基礎示例

          下面示例定義了一個名為 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 程序集和類

          開發者可以通過如下配置引擎實例來允許引擎訪問任何 .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();

          3.Jint 的安全性

          以下功能為開發者提供了一個安全的沙盒環境來運行用戶腳本:

          • 定義內存限制,以防止分配耗盡內存。
          • 啟用 / 禁用 BCL 的使用以防止腳本調用 .NET 代碼。
          • 限制語句數量以防止無限循環。
          • 限制調用深度以防止深度遞歸調用。
          • 定義超時,以防止腳本花費太長時間才能完成。

          4.本文總結

          本文主要和大家介紹 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


          主站蜘蛛池模板: 美女免费视频一区二区三区| 精品国产AⅤ一区二区三区4区| 风间由美性色一区二区三区| 一区在线观看视频| 日本在线电影一区二区三区| 亚洲香蕉久久一区二区| 色狠狠AV一区二区三区| 精品人妻少妇一区二区三区在线| 欧美av色香蕉一区二区蜜桃小说 | 国产免费无码一区二区| 波多野结衣一区二区三区aV高清 | 亚洲日本va一区二区三区| 亚洲电影唐人社一区二区| 日韩在线不卡免费视频一区| 日韩精品区一区二区三VR| 无码人妻AⅤ一区二区三区| 亚洲AV无码一区二区乱子伦| 国产精品熟女一区二区| 久久精品国产一区二区三区肥胖 | 国产剧情国产精品一区| 国产精品熟女一区二区| 无码人妻精品一区二区三区夜夜嗨 | 色老板在线视频一区二区| 人妻少妇一区二区三区| 久久99国产精一区二区三区| 久久久91精品国产一区二区三区| 成人区精品人妻一区二区不卡| 国产一区二区三区不卡AV| 亚洲AV无码一区东京热久久| 亚洲国产精品第一区二区| 国产精品高清一区二区人妖| 国产精品一区二区不卡| 国产福利一区二区| 色妞AV永久一区二区国产AV| 久久婷婷色一区二区三区| 国产美女一区二区三区| 精品久久久中文字幕一区| 国产成人高清精品一区二区三区| 国产精品视频一区二区噜噜| 色噜噜狠狠一区二区三区| 国产乱码精品一区二区三区四川|