ホームページ > バックエンド開発 > C++ > C#コードフラグメントは、ファイルまたはストリームから動的にコンパイルおよび実行できますか?

C#コードフラグメントは、ファイルまたはストリームから動的にコンパイルおよび実行できますか?

Linda Hamilton
リリース: 2025-02-01 14:41:09
オリジナル
735 人が閲覧しました

Can C# Code Fragments Be Dynamically Compiled and Executed from a File or Stream?

コードフラグメントのダイナミックコンパイルと実行

質問:

ファイルまたは入力ストリームに保存されているC#コードフラグメントを動的にコンパイルして実行できますか?

回答:

もちろん

! C#およびその他の静的.NET言語では、CODEDOM(コードドキュメントオブジェクトモデル)がこのようなタスクに最適なソリューションです。また、動的構築コードセグメントまたはクラス全体として使用することもできます。 実装:

動的なコンピレーションを実現するには、csharpcodeproviderクラスを使用します。次の例:

実行:

コンパイルされたコードを実行するには、反射ダイナミックロードアセンブリを使用します。

<code class="language-csharp">using System;
using System.Collections.Generic;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

public class Program
{
    public static void Main(string[] args)
    {
        // 创建C#代码提供程序
        var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

        // 设置编译器参数
        var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
        parameters.GenerateExecutable = true;

        // 编译代码
        CompilerResults results = csc.CompileAssemblyFromSource(parameters,
            @"
            using System.Linq;
            public class Program {
              public static void Main(string[] args) {
                var q = from i in Enumerable.Range(1,100)
                        where i % 2 == 0
                        select i;
                foreach(var item in q)
                {
                    Console.WriteLine(item);
                }
              }
            }"
        );

        // 处理任何错误
        foreach (CompilerError error in results.Errors)
        {
            Console.WriteLine(error.ErrorText);
        }
    }
}</code>
ログイン後にコピー
例:

Codedomを使用することにより、C#Code Fragmentを動的にコンパイルして実行して、プログラミングニーズに強力かつ普遍的なソリューションを提供できます。

はプロジェクト出力ディレクトリに作成されることに注意してください。 このコードは、すべての偶数を1〜100に印刷します。

以上がC#コードフラグメントは、ファイルまたはストリームから動的にコンパイルおよび実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート