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?
cevap
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.
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
Yazar, benim soruda da belirttiğim şeyi söylüyor: Ya büyük bir bellek problemiyle takıldınız ya da kendi AppDomain'de yeni bir kod çalıştırıyorsunuz. Ama makalenin kendisi eğlenceliydi, paylaşım için teşekkürler! – Sasha
- 1. Windows'ta py2app'ı çalıştırabilir miyim?
- 2. ClojureScript'i Google Closure lib olmadan derleyebilir miyim?
- 3. Java ile diske kaydetmeden zip dosyasını nasıl oluşturabilirim?
- 4. Özel ada sahip bir Çalışma Kitabını diske kaydetmeden oluşturma
- 5. numpy.histogramı numpy.bincount gibi davranmaya çalıştırabilir miyim?
- 6. Tomcat'ta .jar dosyasını çalıştırabilir miyim?
- 7. ipython komut dosyalarını çalıştırabilir miyim?
- 8. Emscripten kullanarak i386 modunda bir uygulama derleyebilir miyim?
- 9. VS2010 ve sadece Server 2008 Platform SDK kullanarak VS2008'in C++ derleyicisini kullanarak derleyebilir miyim?
- 10. Kaydet ve yükle crypto/rsa PrivateKey diske ve diske
- 11. Postgresql. Güncelleme sorgusunu paralellde çalıştırabilir miyim?
- 12. Kodakları --harmony etiketi olmadan çalıştırabilir miyim?
- 13. JavaScript'i Swift kodunun içinde çalıştırabilir miyim?
- 14. diske
- 15. Heroh hesabımda bash komut dosyalarını çalıştırabilir miyim?
- 16. F # ajanlarını birden fazla makinede çalıştırabilir miyim?
- 17. Kendi javascript'i (yüklü) bir sayfada çalıştırabilir miyim?
- 18. Aynı bilgisayarda iki web sunucusu çalıştırabilir miyim?
- 19. Bu iki if ifadesini birleştirebilir miyim?
- 20. Açıklamalama işlemcisindeki 'AndroidManifest.xml' ifadesini okuyabilir miyim?
- 21. Macports'un GCC'sini kullanarak evrensel kod derleyebilir miyim? Apple yana
- 22. Derlemeyi C kütüphanesiyle MSVC++ bağlayıcısına nasıl bağlarım?
- 23. Apache Cordova eski Windows masaüstü uygulamalarını (metro dışı) derleyebilir mi?
- 24. Pure Data'dan bir Python komut dosyasını çalıştırabilir miyim?
- 25. Bir derlemeyi, yeniden adlandırılmadan Güçlü Adlandırılmış bir gruba dönüştürebilir miyim?
- 26. Bir bash komut dosyasının ortasında 'su' çalıştırabilir miyim?
- 27. Büyük Dosyayı Diske Özel Durumdan Diske Yazma
- 28. Yii2'ye kaydetmeden önce
- 29. 'cd src' yi her diske girmeye zorlayabilir miyim?
- 30. Android'de Qt çalıştırabilir mi?
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. –
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