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

  • DONFANTASTICKYPESS

    DONFANTASTIC

    1 Temmuz 2007
  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011
  • UberFacts

    UberFacts

    26 EKİM 2013