2010-05-10 17 views
6

Derleme yapabilir, örnek alabilir ve herhangi bir C# tipi programa dayalı bir yöntemi çalıştırabilirim. StackOverflow (How can I evaluate a C# expression dynamically?) dahil olmak üzere pek çok bilgi var. Benim sorunum web ortamında olduğum ve/bin dizinine hiçbir şey kaydedemiyorum. Yukarıda bahsi geçen bağlantı önerdiği gibi "bellek içi" derleyebilirim, ancak özel derlememi geçerli AppDomain'den "yükleyemiyorum". Bir süre sonra büyük bir hafıza problemi olacak. Yeni bir AppDomain açmak, yeni bir derleme "in-memory" derlemek, bazı ifadeleri değerlendirmek veya bu AppDomain'in içindeki bir grubun üyesine erişmek ve bu AppDomain'i güvenli bir şekilde, bir sabit diske kaydetmeden tüm bunları yapmak için güvenli bir şekilde öldürmek mümkün mü? ? Herhangi bir bağlantı, öneri vb. Için şimdiden teşekkür ederiz.Derlemeyi diske kaydetmeden C# ifadesini derleyebilir ve çalıştırabilir miyim?

+0

Sadece bilinen bir türden (ve daha karmaşık bir ifadenin derlenmemesi) rastgele bir yönteme erişmeniz gerekiyorsa, Type sınıfı ve Delegate.CreateDelegate öğesinin GetMethod yöntemini kullanabilirsiniz. Mümkünse yeni bir AppDomain kullanmaktan kaçınmaya çalışacağım, çünkü uygun Marshaling'i elde etmek için bir sürü yeni karmaşıklık olabilir. –

+0

Neredeyse bir C# ifadesini anında değerlendirmem gerekiyor. Aynı eski bool r = Eval ("3> 2"); Eval, diske dokunmadan bool'ü değerlendirmeme yardımcı olacak bir şey. Yani, hayır, yalnız yansıma burada yardımcı olmaz. Teşekkürler, ama yine de :) – Sasha

cevap

2

Net'de DynamicMethod türüne bir göz attınız mı? Bu tür, Reflection.Emit kullanarak bellek yöntemlerinde etkinleştirilmiş çöp toplama oluşturur. Bu tam olarak aradığın gibi geliyor.

+0

Tüm DynamicMethod şeyini tamamen özledim. Okuma zaten ... Hala b = Değerlendir ("5 <6") gibi basit bir şeyi değerlendirmek için nasıl kullanılacağını göremiyorum. Daha fazlasını arıyorum, bir şeyleri özlediğimi umuyordum. Teşekkür ederim! – Sasha

İlgili konular