Выполнить живой код в C # .net - PullRequest
2 голосов
/ 13 декабря 2011

Возможно ли иметь внешний файл, в котором хранится некоторый необработанный код (не C #, возможно, что-то простое, например Javascript или VB Script), который содержит ряд функций, с аргументами, содержащими данные из родительского приложения, и перехватывает возвращаемые данные вернуться к приложению C #. Если да, то как это можно сделать?

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Если вы хотите использовать язык не-CLR, простейшим способом может быть использование System.Diagnostics.Process для выгрузки на исполняемый файл / интерпретатор по вашему выбору и синтаксического анализа stdout с этого.Конечно, вы также можете общаться по более сложным механизмам, таким как именованные каналы, TCP / IP, HTTP и т. Д., Но это требует написания кода с обеих сторон.

Есть некоторые интерпретаторы c # по требованию (* 1007)*http://www.csscript.net/, http://www.codeproject.com/KB/dotnet/nscript.aspx) но я бы их не рекомендовал. В основном потому, что невозможно узнать, какую поддержку вы получите в будущих версиях .NET.

1 голос
/ 13 декабря 2011

Я написал несколько таких приложений с возможностью написания сценариев.Я бы порекомендовал IronPython (http://ironpython.codeplex.com/) для начинающих вместе с инструкциями на Как использовать Microsoft.Scripting.Hosting?. Есть несколько языков на выбор ... IronPython удовлетворял моим потребностямлучший.

1 голос
/ 13 декабря 2011

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

В конце концов, я не думаю, что ваша идея будет успешной. Если я что-то не пропустил, в какой-то момент при добавлении новых функций в необработанный файл javascript вам все равно нужно обновить код C #, чтобы обрабатывать взаимодействие с этим конкретным разделом кода и из него. Возможно, вы могли бы смягчить этот сценарий с большим количеством XML. НО, как только вы начнете думать в этих терминах, у вас будет тонна ввода-вывода, маршалинг данных и кошмар обслуживания.

Короче говоря, я не думаю, что это приемлемый вариант.

Некоторые альтернативы:

Несколько серверов : если вы поддерживаете 2 или 3 одинаковых сервера, вы можете просто отключить один, перенаправить всех пользователей в резервную копию, пока вы обновляете основной сервер. После этого перенаправьте их обратно на основной сервер, а затем обновите резервную копию.

Live Patching : Опять же, я относительно мало знаю о таких методах, но существуют алгоритмы и подходы для исправления живых DLL без необходимости перезапуска. Проведите некоторое исследование на эту тему, потому что это, вероятно, самый жизнеспособный вариант (в большинстве случаев люди и компании не просто покупают больше оборудования без веских причин, чтобы покрыть расходы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...