この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 3803|答える: 7

[ヒント] Roslynを使ってC#コードを動的にコンパイルし、実行します

[リンクをコピー]
掲載地 2024/07/06 16:59:03 | | | |
要件:プロジェクトは顧客のニーズに応じて異なるアルゴリズムやロジックを生成する必要があり、現時点でコードが完全に書き込まれているわけではなく、カスタマイズされたロジックを実行するために何らかのルールエンジンが必要になる場合があります。

.NETコンパイラプラットフォーム(コードネーム:Roslyn)は、MicrosoftがC#およびVisual Basic(VB.NET)言語向けに提供したオープンソースのコンパイラおよびコード解析APIのセットです。

復習:

Roslyn MSBuildコンパイラの違い
https://www.itsvse.com/thread-9596-1-1.html

.NET/C# Roslynコンパイラプラットフォーム
https://www.itsvse.com/thread-10740-1-1.html
まず、以下の参照で新しいコンソールアプリケーションを作成します。

コードは以下の通りです:



C#コードをコンパイルして、ファイルサイズをtest.exeにします3KB。 その結果得られたファイルtest.exe Windows実行ファイルとして実行できず、エラーは次のように報告されます。

処理されていない例外:System.IO.FileNotFoundException:ファイルまたはアセンブリ「System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e」またはその依存関係のいずれかを読み込みに失敗しました。 システムが指定されたファイルを見つけられません。
では、以下のコマンドでコンソールアプリケーションを実行します。

実行後、エラーは次のように報告されます:

致命的なエラーが発生しました。 アプリケーションを実行するために必要なライブラリ「hostpolicy.dll」は「D:\Project\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\」には見つかりませんでした。
自己完結型アプリとして動作しませんでした。
  - アプリケーションは「D:\Project\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\test.runtimeconfig.json」が見つからなかったため、自己完結型アプリとして実行されました。
  - もしフレームワーク依存のアプリであれば、'D:\Project\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\test.runtimeconfig.json'ファイルを追加し、適切なフレームワークを指定します。
大まかに言えば、実行時情報と使用されている.NET Coreのバージョンを含む*.runtimeconfig.jsonファイルが必要です。参照:ハイパーリンクのログインが見えます。

では、以下の構成で新しいtest.runtimeconfig.jsonファイルを作成します。

コマンドを再度実行すると、以下の図のように通常通り実行できることがわかります:



参考:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。





先の:.NET/C#はPDFをPDFtoImageに基づく画像に変換します
次に:ERP キングディー クラウド スターリースカイ (1) シンプルな理解
 地主| 掲載地 2024/07/06 16:59:46 |
.NET/C#はAssemblyLoadContextに基づくDLLプラグインのホットアップデートを実装しています
https://www.itsvse.com/thread-10783-1-1.html
 地主| 掲載地 2024/07/24 17:25:55 |
 地主| 掲載地 2024/12/03 10:14:58 |
C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0 和 C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.11\ 区别



参照アセンブリ(型情報やメタデータ、特定の実装は含まれません!) ):C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0
ランタイムライブラリ(特定の実装):C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.11\



 地主| 掲載地 2024/12/03 10:16:03 |
参照アセンブリとドキュメント




 地主| 掲載地 2024/12/10 17:46:00 |
同時に、シンボルファイル(.pdb)も生成できます
 地主| 掲載地 2024/12/10 17:49:22 |
リリースモードの設定
 地主| 掲載地 2025/06/30 13:40:49 |
リトルスラッグ 2024年7月24日 17:25に投稿
https://github.com/roslynpad/roslynpad/releases

LINQPad:https://www.linqpad.net/
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com