0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

.NET 8.0中有哪些新的變化?

OSC開源社區(qū) ? 來源:葡萄城技術團隊 ? 2023-11-20 16:15 ? 次閱讀

1 性能提升

.NET 8 在整個堆棧中帶來了數千項性能改進。默認情況下會啟用一種名為動態(tài)配置文件引導優(yōu)化 (PGO) 的新代碼生成器,它可以根據實際使用情況優(yōu)化代碼,并且可以將應用程序的性能提高高達 20%?,F在支持的 AVX-512 指令集能夠對 512 位數據向量執(zhí)行并行操作,這意味著可以在更短的時間內處理更多的數據。原始類型(數字及其他類型)現在實現了新的可格式化和可解析接口,這使它們能夠直接格式化和解析為 UTF-8,而無需任何轉碼開銷。

a65687c8-85e7-11ee-939d-92fbcf53809c.png

2.NET Aspire

.NET Aspire 是一個用于使用 .NET 構建彈性、可觀察和可配置的云原生應用程序的堆棧。它包括一組針對云原生而增強的精選組件,默認情況下包括遙測、彈性、配置和運行狀況檢查。結合復雜而簡單的本地開發(fā)人員體驗,.NET Aspire 可以在第 1 天和第 100 天輕松發(fā)現、獲取和配置云原生應用程序的基本依賴項。

a6629144-85e7-11ee-939d-92fbcf53809c.png

3.NET 8 容器增強功能 – 更安全、更緊湊、更高效

使用 .NET 比以往更輕松、更安全地使用容器打包應用程序。每個 .NET 映像都包含一個非 root 用戶,從而通過單行配置啟用更安全的容器。.NET SDK 工具無需 Dockerfile 即可發(fā)布容器映像,并且默認情況下是非 root 的。由于 .NET 基礎映像更小,因此可以更快地部署容器化應用程序 - 包括我們映像的新實驗變體,這些變體可為本機 AOT 提供真正最小的應用程序大小。選擇使用新的 Chiseled Ubuntu 映像變體進行更多安全強化,以進一步減少攻擊面。使用 Dockerfile 或 SDK 工具,為任何架構構建應用程序和容器映像。

a66e4fd4-85e7-11ee-939d-92fbcf53809c.png

4 原生 AoT – 邁向更高密度可持續(xù)計算的旅程

無需等待 JIT(即時)編譯器在運行時編譯代碼。無需部署 JIT 編譯器和 IL 代碼。AOT 應用程序僅部署應用程序所需的代碼。應用程序現在可以在不允許使用 JIT 編譯器的受限環(huán)境中運行。

a678cc7a-85e7-11ee-939d-92fbcf53809c.png

5 人工智能 – 將 AI 融入您的 .NET 應用程序

生成式人工智能和大型語言模型正在改變人工智能領域,使開發(fā)人員能夠在其應用程序中創(chuàng)建獨特的人工智能體驗。.NET 8 可以通過 .NET SDK 中一流的開箱即用 AI 功能以及與多種工具的無縫集成來輕松利用 AI。 .NET 8 為該 庫帶來了多項增強功能,以提高其與生成式 AI 工作負載的兼容性,例如集成 Tensor Primitives。隨著人工智能應用程序的興起,新的工具和 SDK 出現了。我們與眾多內部和外部合作伙伴合作,例如 Azure OpenAI、Azure Cognitive Search、Milvus、Qdrant 和 Microsoft Teams,以確保 .NET 開發(fā)人員可以通過各自的 SDK 輕松訪問各種 AI 模型、服務和平臺。此外,開源語義內核 SDK 簡化了這些 AI 組件與新的和現有應用程序的集成,以幫助您提供創(chuàng)新的用戶體驗。System.Numerics 現在提供各種示例和參考模板,展示模式和實踐,以便開發(fā)人員輕松入門:

客戶聊天機器人

檢索增強生成

使用 Azure AI 服務開發(fā)應用程序

a6b56aae-85e7-11ee-939d-92fbcf53809c.png

6 Blazor – 使用 .NET 構建全棧 Web 應用程序

.NET 8 中的 Blazor 可以同時使用服務器和客戶端來處理您的所有 Web UI 需求。這是全棧 Web UI!通過專注于優(yōu)化頁面加載時間、可擴展性和提升用戶體驗的多項新增強功能,開發(fā)人員現在可以在同一應用程序中使用 Blazor Server 和 Blazor WebAssembly,在運行時自動將用戶從服務器轉移到客戶端。得益于新的基于 “Jiterpreter” 的運行時和新的內置組件,您的 .NET 代碼在 WebAssembly 上的運行速度顯著加快。作為增強.NET 8 中整體身份驗證、授權和身份管理的一部分,Blazor 現在支持生成完整的基于 Blazor 的身份 UI。

a6c36c26-85e7-11ee-939d-92fbcf53809c.png

7 NET MAUI – 提升性能、可靠性和開發(fā)人員體驗

.NET MAUI 提供單一項目系統(tǒng)和單一代碼庫來構建 WinUI、Mac Catalyst、iOSAndroid 應用程序。本機 AOT(實驗性)現在支持針對類似 iOS 的平臺。適用于 .NET MAUI 的新 Visual Studio Code 擴展為您提供了開發(fā)跨平臺 .NET 移動和桌面應用程序所需的工具?,F在支持 Xcode 15 和 Android API 34,允許您瞄準最新版本的 iOS 和 Android。在性能、控件和 UI 元素以及特定于平臺的行為方面進行了大量的質量改進,例如桌面交互添加了更好的點擊處理、鍵盤偵聽器等。

a6cadb64-85e7-11ee-939d-92fbcf53809c.png

8 C# 12 功能 – 簡化語法以提高開發(fā)人員的工作效率 C# 12 讓您的編碼體驗更加高效和愉快?,F在,您可以使用簡單而優(yōu)雅的語法在任何類和結構中創(chuàng)建主構造函數。不再需要樣板代碼來初始化您的字段和屬性。使用簡潔且富有表現力的語法創(chuàng)建數組、跨度和其他集合類型時會感到高興。對 lambda 表達式中的參數使用新的默認值。不再需要重載或空檢查來處理可選參數。您甚至可以使用 usingalias 指令為任何類型添加別名,而不僅僅是命名類型! 8.1 集合表達式 在 C# 12 之前,創(chuàng)建集合需要針對不同場景使用不同的語法。初始化所需的與 or 不同的語法。以下是創(chuàng)建集合的幾種方法:Listint [] Span

int[] x1 = new int[] { 1, 2, 3, 4 };
int[] x2 = Array.Empty();
WriteByteArray(new[] { (byte)1, (byte)2, (byte)3 });
List x4 = new() { 1, 2, 3, 4 };
Span dates = stackalloc DateTime[] { GetDate(0), GetDate(1) };
WriteByteSpan(stackalloc[] { (byte)1, (byte)2, (byte)3 });
8.2 任何類或結構上的主構造函數 C# 12 擴展了主構造函數以適用于所有類和結構,而不僅僅是記錄。主構造函數允許在聲明類時定義構造函數參數:
public class BankAccount(string accountID, string owner)
{
    public string AccountID { get; } = accountID;
    public string Owner { get; } = owner;

    public override string ToString() => $"Account ID: {AccountID}, Owner: {Owner}";
}
主構造函數參數最常見的用途是:

作為 base () 構造函數調用的參數。

初始化成員字段或屬性。

在實例成員中引用構造函數參數。

刪除依賴注入中的樣板。

8.3 別名任意類型 別名類型是從代碼中刪除復雜類型簽名的便捷方法。using 從 C# 12 開始,其他類型在別名指令中有效。例如,這些別名在早期版本的 C# 中無效:

using intArray = int[]; // Array types.
using Point = (int x, int y);  // Tuple type
using unsafe ArrayPtr = int*;  // Pointer type (requires "unsafe")
8.4 默認 lambda 參數 從 C# 12 開始,您可以在 lambda 表達式中聲明默認參數:
var IncrementBy = (int source, int increment = 1) => source + increment;

Console.WriteLine(IncrementBy(5)); // 6
Console.WriteLine(IncrementBy(5, 2)); // 7
8.5 內聯(lián)數組 運行時團隊和其他庫作者使用內聯(lián)數組來提高應用的性能。 內聯(lián)數組使開發(fā)人員能夠創(chuàng)建固定大小的 struct 類型數組。 具有內聯(lián)緩沖區(qū)的結構應提供類似于不安全的固定大小緩沖區(qū)的性能特征。 你可能不會聲明自己的內聯(lián)數組,但當它們從運行時 API 作為System.Span或System.ReadOnlySpan對象公開時,你將透明地使用這些數組。
[System.Runtime.CompilerServices.InlineArray(10)]
public struct Buffer
{
    private int _element0;
}

它們的用法與任何其他數組類似:

var buffer = new Buffer();
for (int i = 0; i < 10; i++)
{
    buffer[i] = i;
}

foreach (var i in buffer)
{
    Console.WriteLine(i);
}
區(qū)別在于編譯器可以利用有關內聯(lián)數組的已知信息。 你可能會像使用任何其他數組一樣使用內聯(lián)數組。 有關如何聲明內聯(lián)數組的詳細信息,請參閱有關struct類型的語言參考。 9反射改進 .NET 5 中引入了函數指針,但當時未添加對反射的相應支持。 對函數指針使用 typeof 或反射時(例如分別使用 typeof (delegate*()) 或 FieldInfo.FieldType),返回了IntPtr。 從 .NET 8 開始,將改為返回System.Type對象。 此類型提供對函數指針元數據的訪問,包括調用約定、返回類型和參數。 新功能目前僅在 CoreCLR 運行時和MetadataLoadContext中實現。已將新的 API 添加到System.Type(例如IsFunctionPointer)以及System.Reflection.PropertyInfo、System.Reflection.FieldInfo 和System.Reflection.ParameterInfo。 以下代碼演示如何使用一些新 API 進行反射。
// Sample class that contains a function pointer field.
public unsafe class UClass
{
    public delegate* unmanaged[Cdecl, SuppressGCTransition] _fp;
}

// ...

FieldInfo fieldInfo = typeof(UClass).GetField(nameof(UClass._fp));

// Obtain the function pointer type from a field.
Type fpType = fieldInfo.FieldType;

// New methods to determine if a type is a function pointer.
Console.WriteLine($"IsFunctionPointer: {fpType.IsFunctionPointer}");
Console.WriteLine($"IsUnmanagedFunctionPointer: {fpType.IsUnmanagedFunctionPointer}");

// New methods to obtain the return and parameter types.
Console.WriteLine($"Return type: {fpType.GetFunctionPointerReturnType()}");

foreach (Type parameterType in fpType.GetFunctionPointerParameterTypes())
{
    Console.WriteLine($"Parameter type: {parameterType}");
}

// Access to custom modifiers and calling conventions requires a "modified type".
Type modifiedType = fieldInfo.GetModifiedFieldType();

// A modified type forwards most members to its underlying type.
Type normalType = modifiedType.UnderlyingSystemType;

// New method to obtain the calling conventions.
foreach (Type callConv in modifiedType.GetFunctionPointerCallingConventions())
{
    Console.WriteLine($"Calling convention: {callConv}");
}

// New method to obtain the custom modifiers.
foreach (Type modreq in modifiedType.GetFunctionPointerParameterTypes()[0].GetRequiredCustomModifiers())
{
    Console.WriteLine($"Required modifier for first parameter: {modreq}");
}

輸出:

IsFunctionPointer: True
IsUnmanagedFunctionPointer: True
Return type: System.Void
Parameter type: System.Int32&
Calling convention: System.Runtime.CompilerServices.CallConvSuppressGCTransition
Calling convention: System.Runtime.CompilerServices.CallConvCdecl
Required modifier for first parameter: System.Runtime.InteropServices.InAttribute
10配置綁定源生成器 .NET 8 引入了一個源生成器,用于在 ASP.NET Core 中提供 AOT 和適合剪裁的配置。 該生成器是現有的基于反射的實現的替代方法。 源生成器探測Configure(TOptions)、Bind 和Get調用來從中檢索類型信息。 在項目中啟用生成器后,編譯器將隱式選擇生成的方法,而非預先存在的基于反射的框架實現。 無需更改源代碼即可使用生成器。 AOT Web 應用中默認啟用該生成器。 對于其他項目類型,源生成器默認關閉,但你可通過在項目文件中將 EnableConfigurationBindingGenerator 屬性設置為 true 來選擇使用它:

    true

以下代碼演示了調用綁定器的示例:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
IConfigurationSection section = builder.Configuration.GetSection("MyOptions");

// !! Configure call - to be replaced with source-gen'd implementation
builder.Services.Configure(section);

// !! Get call - to be replaced with source-gen'd implementation
MyOptions options0 = section.Get();

// !! Bind call - to be replaced with source-gen'd implementation
MyOptions options1 = new MyOptions();
section.Bind(options1);

WebApplication app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();

public class MyOptions
{
    public int A { get; set; }
    public string S { get; set; }
    public byte[] Data { get; set; }
    public Dictionary Values { get; set; }
    public List Values2 { get; set; }
}

public class MyClass
{
    public int SomethingElse { get; set; }
}
11針對 Android 應用的 AOT 編譯 為了減小應用大小,面向 Android 的 .NET 和 .NET MAUI 應用在發(fā)布模式下構建時使用分析的預先 (AOT) 編譯模式。 與常規(guī) AOT 編譯相比,分析的 AOT 編譯所影響的方法更少。 .NET 8 引入了 屬性,你可使用它進一步對 Android 應用進行 AOT 編譯,從而更進一步減少應用大小。

  true

默認情況下,將 AndroidStripILAfterAOT 設置為 true 會替代默認的 AndroidEnableProfiledAot 設置,從而允許剪裁已 AOT 編譯的(幾乎)所有方法。 還可通過將兩個屬性都顯式設置為 true 來結合使用分析的 AOT 和 IL 條帶化:


  true
  true

12代碼分析 .NET 8 包括幾個新的代碼分析器和修復程序,可幫助驗證是否正確且高效地使用 .NET 庫 API。 下表總結了新的分析器
規(guī)則 ID 類別 說明
CA1856 性能 未在參數上正確應用ConstantExpectedAttribute屬性時觸發(fā)。
CA1857 性能 當參數使用ConstantExpectedAttribute添加批注但提供的參數不是常量時觸發(fā)。
CA1858 性能 若要確定字符串是否以給定前綴開頭,最好調用String.StartsWith,而不是調用String.IndexOf,然后將結果與零進行比較。
CA1859 性能 此規(guī)則建議盡可能將特定局部變量、字段、屬性、方法參數和方法返回類型從接口或抽象類型升級到具體類型。 使用具體類型可生成更高質量的代碼。
CA1860 性能 若要確定集合類型是否具有任何元素,最好使用 Length、Count 或 IsEmpty,而不是調用Enumerable.Any。
CA1861 性能 重復調用時,不會重復使用作為參數傳遞的常量數組,這意味著每次都會創(chuàng)建一個新數組。 若要提高性能,請考慮將數組提取到靜態(tài)只讀字段。
CA1865-CA1867 性能 對于單字符串,char 重載的性能更好。
CA2021 可靠性 Enumerable.Cast(IEnumerable)和Enumerable.OfType(IEnumerable)需要兼容的類型才能正常運行。 泛型類型不支持擴大轉換和用戶定義的轉換。
CA1510-CA1513 可維護性 在構造新的異常實例方面,引發(fā)幫助程序比 if 塊更簡單、更高效。 這四個分析器是為以下例外情況創(chuàng)建的:ArgumentNullException、ArgumentException、ArgumentOutOfRangeException和ObjectDisposedException。

13 Core .NET 庫

13.1 時間抽象

新的TimeProvider類和ITimer接口添加了時間抽象功能,讓你可以在測試方案中模擬時間。 此外,還可以使用時間抽象,通過Task.Delay和Task.WaitAsync來模擬依賴于時間進度的Task操作。 時間抽象支持以下基本時間操作:

檢索本地和 UTC 時間

獲取用于測量性能的時間戳

創(chuàng)建計時器

以下代碼片段演示了一些使用情況示例。

// Get system time.
DateTimeOffset utcNow = TimeProvider.System.GetUtcNow();
DateTimeOffset localNow = TimeProvider.System.GetLocalNow();

// Create a time provider that works with a
// time zone that's different than the local time zone.
private class ZonedTimeProvider : TimeProvider
{
    private TimeZoneInfo _zoneInfo;

    public ZonedTimeProvider(TimeZoneInfo zoneInfo) : base()
    {
        _zoneInfo = zoneInfo ?? TimeZoneInfo.Local;
    }

    public override TimeZoneInfo LocalTimeZone => _zoneInfo;

    public static TimeProvider FromLocalTimeZone(TimeZoneInfo zoneInfo) =>
        new ZonedTimeProvider(zoneInfo);
}

// Create a timer using a time provider.
ITimer timer = timeProvider.CreateTimer(callBack, state, delay, Timeout.InfiniteTimeSpan);

// Measure a period using the system time provider.
long providerTimestamp1 = TimeProvider.System.GetTimestamp();
long providerTimestamp2 = TimeProvider.System.GetTimestamp();

var period = GetElapsedTime(providerTimestamp1, providerTimestamp2);
13.2 UTF8 改進 如果要啟用將類型的類似字符串的表示形式寫出到目標范圍,請在類型上實現新的IUtf8SpanFormattable接口。 此新接口與ISpanFormattable密切相關,但面向 UTF8 和 Span,而不是 UTF16 和 Span。 IUtf8SpanFormattable已在所有基元類型(以及其他)上實現,無論是面向 string、Span 還是 Span,其共享邏輯完全一致。 它完全支持所有格式(包括新的 “B” 二進制說明符)和所有區(qū)域性。 這意味著現在可以從 Byte、Complex、Char、DateOnly、DateTime、DateTimeOffset、Decimal、Double、Guid、Half、IPAddress、IPNetwork、Int16、Int32、Int64、Int128、IntPtr、NFloat、SByte、Single、Rune、TimeOnly、TimeSpan、UInt16、UInt32、UInt64、UInt128、UIntPtr 和 Version 直接格式化為 UTF8。 新的Utf8.TryWrite方法向現有MemoryExtensions.TryWrite方法(基于 UTF16)提供基于 UTF8 的對應方法。 可以使用內插字符串語法將復雜表達式直接格式化為 UTF8 字節(jié)范圍,例如:
static bool FormatHexVersion(
    short major,
    short minor,
    short build,
    short revision,
    Span utf8Bytes,
    out int bytesWritten) =>
    Utf8.TryWrite(
        utf8Bytes,
        CultureInfo.InvariantCulture,
        $"{major:X4}.{minor:X4}.{build:X4}.{revision:X4}",
        out bytesWritten);
13.3 加密 .NET 8 添加了對 SHA-3 哈希基元的支持。 (目前,具有 OpenSSL 1.1.1 或更高版本和 Windows 11 Build 25324 或更高版本的 Linux 支持 SHA-3。)可在其中使用 SHA-2 的 API 現在提供對 SHA-3 的補充。 對于哈希,這包括 SHA3_256、SHA3_384 和 SHA3_512;對于 HMAC,這包括 HMACSHA3_256、HMACSHA3_384 和 HMACSHA3_512;對于其中可配置算法的哈希,這包括 HashAlgorithmName.SHA3_256、HashAlgorithmName.SHA3_384 和 HashAlgorithmName.SHA3_512;對于 RSA OAEP 加密,這包括 RSAEncryptionPadding.OaepSHA3_256、RSAEncryptionPadding.OaepSHA3_384 和 RSAEncryptionPadding.OaepSHA3_512。 以下示例演示如何使用 API(包括 SHA3_256.IsSupported 屬性)來確定平臺是否支持 SHA-3。
// Hashing example
if (SHA3_256.IsSupported)
{
    byte[] hash = SHA3_256.HashData(dataToHash);
}
else
{
    // ...
}

// Signing example
if (SHA3_256.IsSupported)
{
     using ECDsa ec = ECDsa.Create(ECCurve.NamedCurves.nistP256);
     byte[] signature = ec.SignData(dataToBeSigned, HashAlgorithmName.SHA3_256);
}
else
{
    // ...
}
13.4 基于流的 ZipFile 方法 .NET 8 包含ZipFile.CreateFromDirectory的新重載,通過它可以收集目錄中包含的所有文件并壓縮這些文件,然后將生成的 zip 文件存儲到提供的流中。 同樣,通過新的ZipFile.ExtractToDirectory重載,可提供包含壓縮文件的流,并將其內容提取到文件系統(tǒng)中。 下面是新的重載:
namespace System.IO.Compression;

public static partial class ZipFile
{
    public static void CreateFromDirectory(string sourceDirectoryName, Stream destination);
    public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, CompressionLevel compressionLevel, bool includeBaseDirectory);
    public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, CompressionLevel compressionLevel, bool includeBaseDirectory, Encoding? entryNameEncoding);

    public static void ExtractToDirectory(Stream source, string destinationDirectoryName) { }
    public static void ExtractToDirectory(Stream source, string destinationDirectoryName, bool overwriteFiles) { }
    public static void ExtractToDirectory(Stream source, string destinationDirectoryName, Encoding? entryNameEncoding) { }
    public static void ExtractToDirectory(Stream source, string destinationDirectoryName, Encoding? entryNameEncoding, bool overwriteFiles) { }
}
ActiveReports是一款專注于 .NET 和 .NET Core 平臺的報表控件。通過拖拽式報表設計器, 可以快速地設計 Excel 表格、Word 文檔、圖表、數據過濾、數據鉆取、精準套打等類型報表, 全面滿足 WinForm、ASP.NET、ASP.NET MVC、WPF 平臺中各種報表的開發(fā)需要。 同時,通過豐富的 API 可以靈活的實現報表創(chuàng)建、加載和運行時的個性化自定義需求。 Wyn 商業(yè)智能是基于葡萄城 20 多年數據分析技術積累打造的全新一代嵌入式 BI 產品,旨在提供可與應用系統(tǒng)深度集成的數據分析功能,能夠與企業(yè)現有業(yè)務系統(tǒng) OA, ERP,MES,CRM 等應用系統(tǒng)深度集成,整合、分析多個業(yè)務系統(tǒng)的數據,自助式分析業(yè)務數據、實時分析決策,全面提升企業(yè)競爭力。 Spread .NET是一個功能、布局與 Excel 高度類似的 .NET 表格控件,可全面滿足 WinForm、ASP.NET、XAML 和 WinRT 等平臺下表格數據處理、數據可視化開發(fā)需求。Spread .NET 支持 462 種 Excel 公式,提供可嵌入系統(tǒng)的類 Excel 設計器和全面開放的 API,為 .NET 開發(fā)人員構建企業(yè)級表格應用程序提供更加專業(yè)的選擇。

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計時器
    +關注

    關注

    1

    文章

    416

    瀏覽量

    32605
  • 容器
    +關注

    關注

    0

    文章

    492

    瀏覽量

    22027
  • 編譯器
    +關注

    關注

    1

    文章

    1617

    瀏覽量

    49015
  • .NET
    +關注

    關注

    0

    文章

    47

    瀏覽量

    24282
  • 聊天機器人
    +關注

    關注

    0

    文章

    330

    瀏覽量

    12281

原文標題:.NET 8.0中有哪些新的變化?

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    [下載]Altium Designer Winter 09 (Altium Designer 8.0) AD8.0下載(最新版本)FTP下

    Altium Designer Winter 09 (Altium Designer 8.0) AD8.0下載(最新版本)FTP下載http://q13003765457.banzhu.net/article/q13003765
    發(fā)表于 12-08 18:14

    求Proteus 8.0教程

    各位大神,求8.0的教程,?{:4_105:}
    發(fā)表于 05-06 15:53

    proteus 8.0新版最新下載

    proteus 8.0新版最新下載,新版許多特性
    發(fā)表于 08-19 23:19

    labview8.0文版

    各路大神有沒有l(wèi)abview8.0文版有沒有什么資料能讓我速成 急!??!
    發(fā)表于 04-05 14:43

    請問在VB.NET或VC.NET是否PC的CySalm代碼/項目?

    你好。我正在玩PSOC3 USB批量數據傳輸使用CySudio。一切都很好。我現在可以操縱我的應用程序的固件。但是,我需要PC(軟件)方面。在VB.NET或VC.NET是否PC的C
    發(fā)表于 08-22 13:29

    labview連接mongdb問題,找到不.NET的泛型類

    有沒有人用labview連接mongodb數據庫的?已下載mongodb的c#驅動,利用labview的.net控件調用相關函數,但是驅動中有部分函數在泛型類, labview能調
    發(fā)表于 04-08 13:38

    NET30-CS哪些特色功能?NET30-CS哪些典型應用?

    NET30-CS哪些特色功能?NET30-CS哪些典型應用?NET30-CS哪些技術參數?
    發(fā)表于 07-02 06:10

    為什么Proteus8.0 漢字顯示亂碼?

    在Proteus8.0 漢字亂碼,通過屬性更換字體還是不行,求解決辦法。
    發(fā)表于 12-16 17:26

    Net模塊的通信傳輸協(xié)議何優(yōu)缺點

    Net模塊在nodemcuNet模塊主要是用于兩個或多個開發(fā)板之間,開發(fā)板與電腦、手機之間的通信。實現它們之間的信息傳遞。Net模塊中有
    發(fā)表于 03-01 07:23

    UG8.0_UG NX 8.0版下載

    UG8.0_UG NX 8.0版下載
    發(fā)表于 09-20 15:45 ?0次下載

    Android 8.0直逼ios? 有人不這么認為!

    Android 8.0新增特性什么?安卓8.0哪些新特性?在2017年的I/O開發(fā)者大會上,國外設計師推出了一套安卓8.0的概念設計,在
    發(fā)表于 02-06 17:15 ?3w次閱讀

    NANDFLASH在WINCE_NET系統(tǒng)的應用設計

    NANDFLASH在WINCE_NET系統(tǒng)的應用設計
    發(fā)表于 10-25 10:10 ?17次下載
    NANDFLASH在WINCE_<b class='flag-5'>NET</b>系統(tǒng)<b class='flag-5'>中</b>的應用設計

    你知道Ubootnet是怎樣的?

    你知道Ubootnet是怎樣的?
    發(fā)表于 05-15 15:20 ?1145次閱讀
    你知道Uboot<b class='flag-5'>中</b>的<b class='flag-5'>net</b>是怎樣的?

    Java和NET什么區(qū)別應該如何選擇

    隨著時代的變化,技術在不斷發(fā)展,編程語言的重要性也在發(fā)生變化。所以,要我們在兩門語言中二選一,通常很困難。在這篇文章里,我們要討論的是 Java 和.NET 之間的“戰(zhàn)爭”。
    的頭像 發(fā)表于 02-15 14:19 ?1.6w次閱讀
    Java和<b class='flag-5'>NET</b><b class='flag-5'>有</b>什么區(qū)別應該如何選擇

    深度解析Asp.Net2.0的Callback機制

    深度解析Asp.Net2.0的Callback機制(ups電源技術維修)-該文檔為深度解析Asp.Net2.0的Callback機制講解文檔,是一份還算不錯的參考文檔,感興趣的可以
    發(fā)表于 09-27 16:28 ?1次下載
    深度解析Asp.<b class='flag-5'>Net</b>2.0<b class='flag-5'>中</b>的Callback機制