SORU
5 Mayıs 2009, Salı


Dinamik olarak mümkün ve C derleme yürütme * kod parçaları?

Eğer C kurtarmak için mümkün olup olmadığını merak ediyordum# kodu bir metin dosyasına parçaları (veya herhangi bir giriş akışı), ve daha sonra bu dinamik olarak yürütmek? Bana sunulan ne olduğunu varsayarsak herhangi bir Ana içinde iyi derleme (), derleme ve bu kod/yürütmek mümkün mü? blok Performansı artırmak için derlemeye tercih ederim.

En azından uygulamak için gerekli olacağını, sonra da bir kod sağlayacak 'bölümünde, bu arayüzü bu hayata. bir arayüz tanımlamak edebilirim

CEVAP
5 Mayıs 2009, Salı


C En iyi çözüm#/tüm statik .NET dilleri gibi şeyler için CodeDOM kullanmaktır. (Bir not olarak, diğer ana amacı, dinamik olarak kod veya tüm sınıfları bile parçaları oluşturmak için.)

İşte güzel bir kısa örnek de biraz SERİ kullanan LukeH's blog, almak için eğlenceli.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

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;
              }
            }");
        results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));
    }
}

Birincil öneme sahip bir sınıf burada derleyici anında kodu derlemek için kullanır CSharpCodeProvider. Sonra kodu çalıştırmak istiyorsanız, sadece dinamik yük meclise yansıması biraz kullanın ve çalıştırmak gerekiyor.

Here C başka bir örnek# (biraz daha kısa olsa da) çalışma zamanı-derlenmiş kodu System.Reflection ad kullanarak çalıştırmak için nasıl ayrıca siz tam olarak gösterir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jabari Johnson

    Jabari Johns

    18 Ocak 2008
  • Lamborghini

    Lamborghini

    13 Aralık 2005
  • Pocketnow

    Pocketnow

    14 EKİM 2007