.NET 8.0 の新機能は?

.NET 8.0 の新機能は?

.NET 8 はスタック全体に数千のパフォーマンス改善をもたらしました

最終更新 2023/11/17 16:03
葡萄城技术团队
読了目安 12 分
カテゴリ
.NET
タグ
.NET C# 技術アップデート

1. パフォーマンス向上

.NET 8 はスタック全体で数千のパフォーマンス改善を実現しています。動的プロファイルガイド付き最適化 (PGO) と呼ばれる新しいコードジェネレーターがデフォルトで有効になり、実際の使用状況に基づいてコードを最適化し、アプリケーションのパフォーマンスを最大20%向上させることができます。新たにサポートされた AVX-512 命令セットにより、512ビットデータベクトルに対して並列操作を実行できるようになり、より短い時間でより多くのデータを処理できます。プリミティブ型(数値など)は新しいフォーマット可能・パース可能インターフェースを実装し、UTF-8 に直接フォーマットおよびパースできるようになり、トランスコーディングのオーバーヘッドが不要になりました。 img

2. NET Aspire

.NET Aspire は、.NET を使用して回復力、観測可能性、構成可能なクラウドネイティブアプリケーションを構築するためのスタックです。クラウドネイティブ向けに強化された厳選コンポーネントを含み、デフォルトでテレメトリ、回復力、構成、ヘルスチェックを備えています。複雑でありながらシンプルなローカル開発者体験と組み合わせることで、.NET Aspire はクラウドネイティブアプリケーションの基本的な依存関係を、1日目と100日目の両方で簡単に発見、取得、構成できます。

ここをクリックして .NET Aspire のプレビューバージョンを確認してください。(サイト運営者注:リンクはありません。後日確認して補足します) img

3. .NET 8 コンテナー機能強化 – より安全、よりコンパクト、より効率的

以前よりも簡単かつ安全にコンテナーを使用してアプリケーションをパッケージ化できます。各 .NET イメージには非 root ユーザーが含まれており、1行の構成でより安全なコンテナーを有効にできます。.NET SDK ツールは Dockerfile なしでコンテナーイメージを公開でき、デフォルトで非 root になります。.NET ベースイメージが小さくなったため、コンテナー化アプリケーションをより高速にデプロイできます。これには、ネイティブ AOT に真に最小限のアプリケーションサイズを提供する新しい実験的なイメージバリアントも含まれます。新しい Chiseled Ubuntu イメージバリアントを選択してセキュリティをさらに強化し、攻撃対象領域をさらに減らすことができます。Dockerfile または SDK ツールを使用して、任意のアーキテクチャ向けにアプリケーションとコンテナーイメージを構築できます。

img

4. ネイティブ AOT – より高密度で持続可能なコンピューティングへの道

JIT(ジャストインタイム)コンパイラが実行時にコードをコンパイルするのを待つ必要はありません。JIT コンパイラや IL コードをデプロイする必要もありません。AOT アプリケーションはアプリケーションに必要なコードのみをデプロイします。アプリケーションは JIT コンパイラの使用が許可されていない制限された環境でも実行できるようになりました。

img

5. 人工知能 – AI を .NET アプリケーションに統合

生成 AI と大規模言語モデルは AI 分野を変革し、開発者がアプリケーション内に独自の AI 体験を創り出せるようにしています。.NET 8 は.NET SDK の一流のすぐに使える AI 機能と、さまざまなツールとのシームレスな統合により、AI を簡単に活用できます。

.NET 8 はライブラリにいくつかの機能強化をもたらし、Tensor プリミティブの統合など、生成 AI ワークロードとの互換性を向上させています。AI アプリケーションの台頭に伴い、新しいツールと SDK が登場しています。Azure OpenAI、Azure Cognitive Search、Milvus、Qdrant、Microsoft Teams など、多数の内部および外部パートナーと協力し、.NET 開発者がそれぞれの SDK を通じてさまざまな AI モデル、サービス、プラットフォームに簡単にアクセスできるようにしています。さらに、オープンソースの Semantic Kernel System.Numerics SDK は、これらの AI コンポーネントを新しいアプリケーションや既存のアプリケーションと統合するプロセスを簡素化し、革新的なユーザー体験を提供するのに役立ちます。

パターンとプラクティスを示すさまざまなサンプルと参照テンプレートが用意されており、開発者は簡単に始めることができます:

img

6. Blazor – .NET でフルスタック Web アプリケーションを構築

.NET 8 の Blazor は、サーバーとクライアントの両方を使用してすべての Web UI 要件を処理できます。フルスタック Web UI です!ページ読み込み時間の最適化、拡張性、ユーザーエクスペリエンスの向上に焦点を当てた複数の新機能強化により、開発者は同じアプリケーション内で Blazor Server と Blazor WebAssembly を併用し、実行時にユーザーをサーバーからクライアントへ自動的に移行できます。新しい「Jiterpreter」ベースのランタイムと新しい組み込みコンポーネントのおかげで、.NET コードは WebAssembly 上で大幅に高速に実行されます。.NET 8 の全体的な認証、承認、ID 管理の強化の一環として、Blazor は完全な Blazor ベースの ID UI の生成をサポートするようになりました。

img

7. .NET MAUI – パフォーマンス、信頼性、開発者体験の向上

.NET MAUI は、WinUI、Mac Catalyst、iOS、Android アプリケーションを構築するための単一プロジェクトシステムと単一コードベースを提供します。ネイティブ AOT(実験的)が iOS に類似したプラットフォームを対象とするようになりました。.NET MAUI 用の新しい Visual Studio Code 拡張機能は、クロスプラットフォームの .NET モバイルおよびデスクトップアプリケーションを開発するために必要なツールを提供します。Xcode 15 および Android API 34 をサポートし、iOS および Android の最新バージョンをターゲットにできます。パフォーマンス、コントロールと UI 要素、プラットフォーム固有の動作において多数の品質改善が行われました。例えば、デスクトップインタラクションではクリック処理の改善、キーボードリスナーなどが追加されました。

img

8. C# 12 の機能 – 開発者の生産性を向上させる簡潔な構文

C# 12 はコーディング体験をより効率的で楽しいものにします。任意のクラスや構造体でプライマリコンストラクターを簡潔でエレガントな構文で作成できるようになりました。フィールドやプロパティを初期化するためのボイラープレートコードはもう必要ありません。簡潔で表現力豊かな構文を使用して配列、スパン、その他のコレクション型を作成できます。ラムダ式のパラメーターに新しいデフォルト値を使用できます。オプションパラメータを処理するためのオーバーロードや null チェックはもう必要ありません。using alias ディレクティブを使用して、名前付き型だけでなく任意の型にエイリアスを設定することもできます!

8.1. コレクション式

C# 12 以前では、コレクションを作成するにはシナリオごとに異なる構文が必要でした。List<int>int[]Span<int> の初期化には異なる構文が必要でした。以下にコレクションを作成するいくつかの方法を示します:

int[] x1 = new int[] { 1, 2, 3, 4 };
int[] x2 = Array.Empty<int>();
WriteByteArray(new[] { (byte)1, (byte)2, (byte)3 });
List<int> x4 = new() { 1, 2, 3, 4 };
Span<DateTime> 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 alias ディレクティブは C# 12 以降でその他の型に対しても有効です。たとえば、これらのエイリアスは C# の以前のバージョンでは無効でした:

using intArray = int[]; // 配列型
using Point = (int x, int y);  // タプル型
using unsafe ArrayPtr = int*;  // ポインター型("unsafe"が必要)

8.4. ラムダのデフォルトパラメーター

C# 12 以降、ラムダ式でデフォルトパラメーターを宣言できます:

var IncrementBy = (int source, int increment = 1) => source + increment;

Console.WriteLine(IncrementBy(5)); // 6
Console.WriteLine(IncrementBy(5, 2)); // 7

8.5. インライン配列

ランタイムチームやその他のライブラリ作成者は、アプリケーションのパフォーマンスを向上させるためにインライン配列を使用します。インライン配列により、開発者は固定サイズの構造体型配列を作成できます。インラインバッファーを持つ構造体は、安全でない固定サイズバッファーと同様のパフォーマンス特性を提供する必要があります。独自のインライン配列を宣言することはないかもしれませんが、ランタイム 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);
}

違いは、コンパイラがインライン配列について既知の情報を活用できることです。他の配列と同じようにインライン配列を使用できます。インライン配列の宣言方法の詳細については、structの言語リファレンスを参照してください。

9. リフレクションの改善

関数ポインターは .NET 5 で導入されましたが、当時はリフレクションの対応は追加されていませんでした。関数ポインターで typeof またはリフレクションを使用すると(例:typeof(delegate*<void>())FieldInfo.FieldType)、IntPtr が返されていました。.NET 8 以降は、代わりに System.Type オブジェクトが返されるようになりました。この型は、関数ポインターのメタデータ(呼び出し規約、戻り値の型、パラメーターなど)へのアクセスを提供します。

この新機能は現在 CoreCLR ランタイムと MetadataLoadContext でのみ実装されています。System.TypeIsFunctionPointer など)および System.Reflection.PropertyInfo、System.Reflection.FieldInfo、System.Reflection.ParameterInfo に新しい API が追加されました。以下のコードは、新しい API を使用してリフレクションを行う方法を示しています。

// 関数ポインターフィールドを含むサンプルクラス
public unsafe class UClass
{
    public delegate* unmanaged[Cdecl, SuppressGCTransition]<in int, void> _fp;
}

// ...

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

// フィールドから関数ポインター型を取得
Type fpType = fieldInfo.FieldType;

// 新しいメソッド:型が関数ポインターかどうかを判定
Console.WriteLine($"IsFunctionPointer: {fpType.IsFunctionPointer}");
Console.WriteLine($"IsUnmanagedFunctionPointer: {fpType.IsUnmanagedFunctionPointer}");

// 新しいメソッド:戻り値の型とパラメーター型を取得
Console.WriteLine($"Return type: {fpType.GetFunctionPointerReturnType()}");

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

// カスタム修飾子と呼び出し規約にアクセスするには「修飾型」が必要
Type modifiedType = fieldInfo.GetModifiedFieldType();

// 修飾型はほとんどのメンバーを基になる型に転送する
Type normalType = modifiedType.UnderlyingSystemType;

// 新しいメソッド:呼び出し規約を取得
foreach (Type callConv in modifiedType.GetFunctionPointerCallingConventions())
{
    Console.WriteLine($"Calling convention: {callConv}");
}

// 新しいメソッド:カスタム修飾子を取得
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 に設定することでオプトインできます:

<PropertyGroup>
    <EnableConfigurationBindingGenerator>true</EnableConfigurationBindingGenerator>
</PropertyGroup>

以下のコードはバインダーを呼び出す例を示しています:

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

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

// !! Configure 呼び出し - ソース生成実装に置き換えられます
builder.Services.Configure<MyOptions>(section);

// !! Get 呼び出し - ソース生成実装に置き換えられます
MyOptions options0 = section.Get<MyOptions>();

// !! Bind 呼び出し - ソース生成実装に置き換えられます
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<string, string> Values { get; set; }
    public List<MyClass> Values2 { get; set; }
}

public class MyClass
{
    public int SomethingElse { get; set; }
}

11. Android アプリの AOT コンパイル

アプリケーションサイズを削減するために、Android を対象とする .NET および .NET MAUI アプリケーションは、リリースモードでビルドするときにプロファイリングされた事前(AOT)コンパイルモードを使用します。通常の AOT コンパイルと比較して、プロファイリングされた AOT コンパイルは影響を受けるメソッドが少なくなります。.NET 8 では、<AndroidStripILAfterAOT> プロパティが導入され、これを使用して Android アプリをさらに AOT コンパイルし、アプリケーションサイズをさらに削減できます。

<PropertyGroup>
  <AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
</PropertyGroup>

デフォルトでは、AndroidStripILAfterAOT を true に設定すると、デフォルトの AndroidEnableProfiledAot 設定がオーバーライドされ、AOT コンパイルされた(ほぼ)すべてのメソッドをトリミングできます。また、両方のプロパティを明示的に true に設定することで、プロファイリング AOT と IL ストリッピングを組み合わせて使用することもできます:

<PropertyGroup>
  <AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
  <AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>

12. コード分析

.NET 8 には、.NET ライブラリ API を正しく効率的に使用していることを確認するのに役立つ、いくつかの新しいコードアナライザーと修正プログラムが含まれています。次の表は、新しいアナライザーをまとめたものです。

ルール ID カテゴリ 説明
CA1856 パフォーマンス パラメーターに ConstantExpectedAttribute 属性が正しく適用されていない場合にトリガーされます。
CA1857 パフォーマンス パラメーターに ConstantExpectedAttribute が注釈されているが、提供されるパラメーターが定数でない場合にトリガーされます。
CA1858 パフォーマンス 文字列が特定のプレフィックスで始まるかどうかを判断するには、String.IndexOf を呼び出して結果をゼロと比較するよりも、String.StartsWith を呼び出す方が適切です。
CA1859 パフォーマンス このルールは、特定のローカル変数、フィールド、プロパティ、メソッドパラメーター、メソッドの戻り値の型を、インターフェイスまたは抽象型から具象型に可能な限りアップグレードすることを推奨します。具象型を使用すると、より高品質なコードを生成できます。
CA1860 パフォーマンス コレクション型に要素があるかどうかを判断するには、Enumerable.Any を呼び出すよりも、Length、Count、または IsEmpty を使用する方が適切です。
CA1861 パフォーマンス 繰り返し呼び出す際、引数として渡される定数配列が再利用されず、毎回新しい配列が作成されます。パフォーマンスを向上させるには、配列を静的読み取り専用フィールドに抽出することを検討してください。
CA1865-CA1867 パフォーマンス 単一の文字列の場合、char オーバーロードのパフォーマンスが優れています。
CA2021 信頼性 Enumerable.Cast(IEnumerable)Enumerable.OfType(IEnumerable) は、正しく動作するために互換性のある型が必要です。ジェネリック型は拡大変換やユーザー定義変換をサポートしていません。
CA1510-CA1513 保守性 新しい例外インスタンスを構築する際、if ブロックよりもスロー用ヘルパーの方がシンプルで効率的です。これら4つのアナライザーは、次の例外のために作成されました:ArgumentNullExceptionArgumentExceptionArgumentOutOfRangeExceptionObjectDisposedException

13. .NET Core ライブラリ

13.1. 時間抽象化

新しい TimeProvider クラスと ITimer インターフェイスにより時間抽象化機能が追加され、テストシナリオで時間をモックできるようになりました。さらに、時間抽象化を使用して、Task.Delay および Task.WaitAsync を介して、時間の経過に依存する Task 操作をモックすることもできます。時間抽象化は、以下の基本的な時間操作をサポートします:

  • ローカル時刻と UTC 時刻の取得
  • パフォーマンス測定用のタイムスタンプの取得
  • タイマーの作成

以下のコードスニペットは、いくつかの使用例を示しています。

// システム時刻を取得
DateTimeOffset utcNow = TimeProvider.System.GetUtcNow();
DateTimeOffset localNow = TimeProvider.System.GetLocalNow();

// ローカルタイムゾーンとは異なるタイムゾーンで動作するタイムプロバイダーを作成
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);
}

// タイムプロバイダーを使用してタイマーを作成
ITimer timer = timeProvider.CreateTimer(callBack, state, delay, Timeout.InfiniteTimeSpan);

// システムタイムプロバイダーを使用して期間を測定
long providerTimestamp1 = TimeProvider.System.GetTimestamp();
long providerTimestamp2 = TimeProvider.System.GetTimestamp();

var period = GetElapsedTime(providerTimestamp1, providerTimestamp2);

13.2. UTF8 の改善

型の文字列に似た表現をターゲット範囲に書き出すことを有効にするには、新しい IUtf8SpanFormattable インターフェイスを型に実装します。この新しいインターフェイスは ISpanFormattable と密接に関連していますが、UTF16 と Span<char> ではなく UTF8 と Span<byte> を対象としています。

IUtf8SpanFormattable はすべてのプリミティブ型(およびその他)で実装されており、string、Span<char>Span<byte> のいずれを対象とする場合でも、共有ロジックは完全に同一です。新しい "B" バイナリ指定子を含むすべての書式と、すべてのカルチャを完全にサポートしています。つまり、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 バイト範囲に直接書式設定できます。例えば:

static bool FormatHexVersion(
    short major,
    short minor,
    short build,
    short revision,
    Span<byte> 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 ハッシュプリミティブのサポートが追加されました。(現在、SHA-3 をサポートするのは OpenSSL 1.1.1 以降の Linux と Windows 11 Build 25324 以降です。)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 が含まれます。

以下の例は、SHA3_256.IsSupported プロパティを使用してプラットフォームが SHA-3 をサポートしているかどうかを判断する方法を含む API の使用方法を示しています。

// ハッシュの例
if (SHA3_256.IsSupported)
{
    byte[] hash = SHA3_256.HashData(dataToHash);
}
else
{
    // ...
}

// 署名の例
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 オーバーロードを使用すると、圧縮ファイルを含むストリームを提供し、その内容をファイルシステムに抽出できます。新しいオーバーロードは次のとおりです:

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) { }
}

GrapeCity Documents for Excel (略称 GcExcel)は、.NET および .NET Core プラットフォームに基づくサーバーサイドの高性能テーブルコンポーネントであり、Office、NPOI またはサードパーティのアプリケーションソフトウェアに依存せず、フロントエンドでテーブルデータを表示し、サーバーサイドで Excel ドキュメントの一括作成、読み込み、編集、印刷、インポート/エクスポートを実行し、開発対象のアプリケーションにオンラインドキュメントのフロントエンド/バックエンドデータ同期、オンライン入力、サーバーサイドの一括エクスポートと印刷を提供します。

ActiveReports は、.NET および .NET Core プラットフォームに特化したレポートコントロールです。ドラッグ&ドロップのレポートデザイナーを使用して、Excel テーブル、Word 文書、チャート、データフィルタリング、データドリルダウン、精密なオーバーレイ印刷などのタイプのレポートを迅速に設計でき、WinForm、ASP.NET、ASP.NET MVC、WPF プラットフォームのさまざまなレポート開発ニーズを完全に満たします。同時に、豊富な API により、レポートの作成、読み込み、実行時の個別カスタマイズ要件を柔軟に実現できます。

Wyn ビジネスインテリジェンス は、グレープシティの20年以上にわたるデータ分析技術の蓄積に基づいて開発された、次世代の組み込み型 BI 製品です。アプリケーションシステムと深く統合できるデータ分析機能を提供することを目的としており、企業の既存の業務システム(OA、ERP、MES、CRM など)と深く統合し、複数の業務システムのデータを統合・分析し、セルフサービスで業務データを分析、リアルタイムの分析意思決定を実現し、企業の競争力を全面的に向上させます。

Spread .NET は、機能とレイアウトが Excel と非常に類似した .NET テーブルコントロールであり、WinForm、ASP.NET、XAML、WinRT などのプラットフォームでのテーブルデータ処理、データ可視化開発のニーズを全面的に満たします。Spread .NET は 462 種類の Excel 数式をサポートし、システムに埋め込み可能な Excel ライクなデザイナーと完全に開放された API を提供し、.NET 開発者にエンタープライズ向けテーブルアプリケーションを構築するためのより専門的な選択肢を提供します。

参考資料:

https://learn.microsoft.com/ja-jp/dotnet/core/whats-new/dotnet-8#networking

拡張リンク:

Blazor フレームワークを使用してフロントエンドブラウザで Excel XLSX をインポート/エクスポートする方法

.NET スプレッドシートアプリケーションでフローチャートを作成する方法

リアルタイムデータをフロントエンドスプレッドシートに表示する方法


この記事はグレープシティ技術開発チームによって公開されています。転載の際は出典を明記してください:グレープシティ公式サイト

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む
同じカテゴリ / 同じタグ 2026/02/07

AOTの使用経験のまとめ

プロジェクト作成当初から、新機能を追加したり新しい構文を使用したりした場合には、すぐにAOT公開テストを実施するという良い習慣を身につけるべきです。

続きを読む