- ジェネレーターレベルの [ Web Server ] プロパティでは、プラットフォームが異なるため、.NET ジェネレーターと .NET Framework ジェネレーターに異なる値が用意されています。たとえば、値「Kestrel HTTP Server」は .NET ジェネレーター専用であるため、このジェネレーターにのみ使用できます。
- ビルド操作後に GeneXus に表示される出力はいずれの場合も似ています。いずれのジェネレーターでも MSBuild のメカニズムを使ってコンパイルが行われます。
- .NET ジェネレーターでは、コンパイルに「dotnet build」コマンドが使用されます。
- .NET Frameworkジェネレーターでは、コンパイルに msbuild.exe コマンドが使用されますが、これは .NET が必要となることを避けるためです (いずれも「dotnet build」コマンドでコンパイル可能であるため)。
-
すべての操作で、常に LastBuild.sln という Visual Studio ソリューションが生成されます。これには、直前のビルド操作で生成されたオブジェクトのリストが含まれます。このソリューションは、GeneXus IDE 以外でアセンブリをリビルドするときや、生成されたコードをデバッグするときに使用できます。
生成されるコードの相違点
.NET ジェネレーターで生成されるコードは事実上、.NET Framework ジェネレーターで生成されるコードと同じですが、.NET ジェネレーターのほうが作成されるソースが少ないという点が異なります。
REST サービスについては、接尾語 _services.cs (*_services.cs)
のソースが生成されません (*.svc は生成されます)。
また、*.rsp bld * .cs はいずれの場合も生成されません。
生成されたコードは
build ディレクトリーに保持されます (
web ディレクトリーと同階層):
.NET で生成する場合は、
web.config ファイルに環境プロパティの設定が含まれます。.NET でこれに相当するのが
appsettings.json です。形式は JSON (プロパティと値のリスト) で、構造は web.config ファイルとよく似ています。
appsettings.json ファイルは情報量が web.config ファイルよりも少なくなります。これは、ASPNET に固有のセクションが、appsettings.json ファイルに含まれず、
GeneXus 標準クラスのコードに直接プログラミングされるからです。
.NET ジェネレーターで [ Web Server ] プロパティを Internet Information Server に設定すると、小さな web.config ファイルが作成されます。
このファイルは非常に小さく、IIS を Kestrel Web サーバーに接続するための設定が含まれます。
- .NET Framework では、コマンド ラインのメインプロシージャーには .exe 拡張子が付き、.NET では .dll 拡張子が付いています。次のようなコマンドで実行されます:
- メインプロシージャーを実行するには、対応する. deps.json (依存関係とそのパスを含む) が実行可能ファイルと同じパスに存在している必要があります。
- たとえば、amainprocedure.dll を実行するには、amainprocedure.deps.json が amainprocedure.dll と同じディレクトリにある必要があります。
- 実行時にブラウザーでアプリケーションを実行し、.NET 用に生成されたアプリケーションと .NET Framework 用に生成された別のアプリケーションを比較しても、わずかな差しか認められません。
- ヘッダーは、.NET フレームワークのサーバーが Microsoft-IIS であり、.NET のサーバーが Kestrel であることを示しています。
- 圧縮の相違点も確認できます:
- .NET では Framework 常に gzip で圧縮されます。
- .NET には複数の圧縮方法があり、リスト内からクライアントでサポートされている最初のものが使用されます (例: 'br' は Brotli に対応)。
- URL は同じです (
URL Rewrite オブジェクトカスタマイズできます)。
- パフォーマンスおよびマルチスレッド機能: .NET では、同じセッション内のリクエストの並行処理が既定でサポートされます。これに対して .NET Framework では、設定を変更しない限り リクエストがキューに入れられます (.NET Framework 4.7 でサポートしています)。この点では .NET の動作は Java に似ています (参照:
https://stackoverflow.com/questions/44527292/enabling-concurrent-requests-from-same-session-in-asp-net-core)。
.NET 用の MySQL ドライバーは、複数のデータリーダーをサポートしていません。これは次のことを意味します:
データベーステーブルに対してネストされたループがあり (たとえば複数の
For Each コマンドのネストや、For Each コマンドにネストされた New コマンド)、外側の For Each によって返されるレコードセットの濃度が高い場合、メモリー使用量が多くなる可能性があります。
[ Web Server ] プロパティが Kestrel HTTP Server に設定されているときは、サーバーの実行中にコンソールが開き、管理されていない例外やエラーを含むランタイム実行に関する情報が表示されます。
[ Web Server ] プロパティが Internet Information Server に設定されているときは、内部 Kestrel サーバーの出力を含むトレースがあり、web.config を通じて有効できます (次のように「sdtoutLogEnabled」を設定):