C # вместо IronRuby в качестве встроенного языка сценариев в .NET 3.5

Как лучше всего использовать C # в качестве встроенного приложения для внутренних сценариев для приложения .NET 3.5? У меня есть приложение с несколькими небольшими скриптами IronRuby. Ничто из этого на самом деле не использует динамическую природу IronRuby.

Очевидно, использование IronRuby или IronPython прямо сейчас противоречит нашему корпоративному стандарту. Упс. Как лучше всего использовать C # в качестве языка сценариев?

Что мне понравилось в IronRuby, так это то, что я мог вносить небольшие изменения во время работы приложения, а затем повторно запускать скрипты. Любой способ сделать это на C #? Или придется постоянно перезапускать приложение?


person BuddyJoe    schedule 25.01.2010    source источник


Ответы (4)


На данный момент вы не можете использовать C # в качестве языка сценариев, если не переключитесь на Mono.

Microsoft заявила, что эта (или подобная функциональность) входит в дорожную карту C # версии 5, которая находится далеко в будущем.

Однако в настоящее время вы можете подделать его, создав временный «файл кода» в виде строки в памяти, запустив извне компилятор C # для создания новой сборки в памяти, а затем загрузив и выполнив эту сборку.
Это будет хорошо работать. один раз, но если вы хотите обновить его без перезапуска, вам придется загружать сборку в памяти в новый домен приложения и каждый раз выгружать старую (что становится довольно сложно).

Если честно, я бы не стал заморачиваться. C # не является хорошим языком сценариев из-за его скомпилированного характера и статической типизации.

person Orion Edwards    schedule 28.02.2010

Встраивать IronRuby для написания сценариев не так уж сложно.
У Джимми Шементи (одного из разработчиков IronRuby) есть полный и подробный пример этого:

http://blog.jimmy.schementi.com/2009/12/ironruby-rubyconf-2009-part-35.html

Я не думаю, что это будет очень легко сделать с C #.

Извините, я знаю, что это не ответ на ваш вопрос, но, надеюсь, это будет полезно для тех, кто пытается работать со сценариями через IronRuby.

person Kevin Radcliffe    schedule 25.01.2010
comment
Я действительно люблю IronRuby. Но также хотелось бы, чтобы был C #, который я мог бы подключить через DLR или так же просто, как DLR. У меня около 20 скриптов в этом приложении, которые просто не пройдут через проверку внутренних стандартов. DLR может пройти, если Microsoft оставит JavaScript в DLR. Моя компания одобрила JavaScript, и большинство наших разработчиков уже знают об этом. - person BuddyJoe; 26.01.2010
comment
@tyndall вы смотрели монопроект? У них уже есть компилятор в качестве службы, которая позволяет вам делать очень похожие вещи, но с C # и без DLR. - person Casual Jim; 11.02.2010

Возможно, вы сможете обновить свой код C # во время работы приложения, но это будет непросто. В этой ветке обсуждаются попытки сделать такую ​​вещь:

http://www.eggheadcafe.com/software/aspnet/30778032/assemblyload-and-updat.aspx

Внизу этой ветки есть ссылка на эту статью, которая выглядит полезной:

http://dotnet.sys-con.com/node/113340

Базовый подход состоит в том, чтобы загрузить сборку вашего плагина в отдельный AppDomain, а затем выгрузить весь AppDomain, когда вы хотите заменить свой плагин.

person Nate C-K    schedule 25.01.2010

Вы всегда можете попробовать использовать CS Script.

http://www.csscript.net/

Лично я бы посоветовал использовать для написания сценариев либо IronRuby, либо Lua.

person Michael K.    schedule 03.08.2010
comment
Я смотрел на это? Насколько активна / стабильна разработка проектов Lua для .NET? Я никогда не пробовал реализовать. - person BuddyJoe; 05.08.2010
comment
Это кажется достаточно хорошим решением для большинства, но я недавно переключился с него в одном из моих проектов на размещенный IronRuby, так как моим скриптам требовалось больше мощности, без необходимости регистрировать слишком много вещей в Lua. Если вы заинтересованы в использовании Lua с .Net, есть действительно хороший настраиваемый атрибут для команд Lua, написанный Мартином Эчеником. Его можно найти здесь: gamedev.net/reference/articles/article2275.asp Это избавит вас от необходимости вручную регистрировать любые методы, которые должны быть доступны для ваших сценариев Lua. - person Michael K.; 05.08.2010