Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menyusun dan melaksanakan serpihan kod C#?

Bagaimanakah saya boleh menyusun dan melaksanakan serpihan kod C#?

Patricia Arquette
Patricia Arquetteasal
2025-02-01 14:26:09668semak imbas

How Can I Dynamically Compile and Execute C# Code Fragments?

kompilasi dinamik dan pelaksanaan serpihan kod

Artikel ini memperkenalkan cara menyusun dan melaksanakan fragmen kod C#dari fail teks atau aliran input. Adalah disyorkan untuk menggunakan Model Objek Dokumen Kod (CODEDOM) dalam bahasa C#dan .NET untuk mencapai fungsi ini.

CodeDom membolehkan anda mengendalikan kod sebagai objek dan menggunakan pengkompil untuk menyusun secara dinamik kod. Serpihan kod berikut menunjukkan kaedah ini:

Dalam contoh ini,
<code class="language-csharp">using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        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;
            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);
                }
              }
            }");

        // 检查错误
        results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));

        // 动态加载并执行已编译的程序集
        if (results.Errors.Count == 0)
        {
            Assembly assembly = results.CompiledAssembly;
            var type = assembly.GetTypes()[0];
            var method = type.GetMethod("Main");
            method.Invoke(null, new object[] { new string[] { } });
        }
    }
}</code>
dan

digunakan untuk kod kompilasi dinamik. Sekiranya tiada ralat penyusunan, muatkan set program yang disusun secara dinamik dan panggil kaedah CompilationParameters. Untuk menunjukkan hasilnya lebih lengkap, kod sampel telah diubah suai kepada hasil boneka yang dicetak. CSharpCodeProvider Main Kaedah ini menyediakan penyelesaian yang fleksibel dan umum untuk kompilasi dinamik dan pelaksanaan serpihan kod C#, yang membolehkan anda merealisasikan pelbagai senario, seperti pelaksanaan skrip atau penjanaan kod dinamik.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyusun dan melaksanakan serpihan kod C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn