Подтвердить что ты не робот

Как мне приступить к разработке и внедрению интерфейса script для моего приложения .NET?

Как мне приступить к разработке и внедрению интерфейса script для моего приложения .NET?

Существует VSTA (эквивалент .NET VBA для COM), но насколько я понимаю, мне пришлось бы заплатить лицензионный сбор за каждую установку моего приложения, Это открытый источник поэтому это не сработает.

Существует также, например, встраивание интерпретаторов (IronPython?), но я не понимаю, как это позволит подвергать "объектную модель" (см. ниже) внешним (или внутренним) скриптам.

подвопросы:

  • Что такое рассказ интерфейса сценариев в .NET? Это как-то тривиально сделать это в .NET?
  • например. могут ли некоторые объекты .NET в моем приложении и их содержащиеся объекты объявляться доступными снаружи во время выполнения?
  • Как внешние скрипты получают доступ к моему приложению (через объектную модель)?

Фон:

Я как-то разработал и реализовал довольно привлекательный интерфейс script для приложения Macintosh для сбора и анализа данных из масс-спектрометра ( Mac OS, System 7), а затем COM-интерфейс для приложения Windows.

Оба были разработаны с "объектной моделью" и классами (которые могут иметь свойства). Это перегруженные слова, но в объектной модели контекста интерфейса сценариев, по сути, является сдерживающей хиархией объекты конкретных классов. Классы имеют свойства, списки содержащихся объектов и являются не только данными, но также могут иметь глаголы (действия/методы). Например. в случае Macintosh определено объект приложения может содержать объект сбора, который имеет свойства для напряжений, используемых в инструменте, и глагол fireLater - все, как видно из внешнего script.

Обратите внимание, что в обоих случаях классы/объекты на языке программирования, используемые для реализации приложения, не имеют ничего общего с моделью объектов сценариев. Для случая Macintosh механизмы, используемые для реализации интерфейса сценариев, были определены Apple. Были также некоторые стандарты, определенные Apple о том, как создать объектную модель. Например, стандартизованные имена для некоторых общих свойств в классах.

Или как в интерфейсах COM, открытых в приложениях Microsoft Office, где объект приложения может использоваться для добавления в его список документов (с побочным эффектом создания GUI-представления документа).

Внешние скрипты могут создавать новые объекты в контейнере и перемещаться по содержимому хиархии в любой момент времени. В сценариях Macintosh сценарии могут быть написаны, например. AppleScript или Frontier.

На Macintosh реализация интерфейса сценариев была очень сложной. Поддержка этого в Metroworks 'Библиотека классов С++ (имя ускользает от меня прямо сейчас) сделало ее намного проще.

4b9b3361

Ответ 1

[РЕДАКТИРОВАТЬ. Как подробно описано в комментариях к этому вопросу, если у вас есть необходимость включить внутренние скрипты, где вы размещаете фрагменты или функции, кто-то дает вам возможность настроить ваше приложение, а не чисто внешний сценарий, предоставляет фасад, позволяющий людям выкапывать материал из вашего приложения на более жесткой предопределенной основе]

IronRuby и IronPython очень аккуратны и подходят для этого (но, как говорит другой ответ, PowerShell может быть уместным, если у вас есть больше объектов типа инфраструктуры).

EDIT: Другие идеи для включения внутренних скриптов:

  • с помощью Windows Workflow Foundation (выставляя на него действия и/или размещая экземпляры рабочих процессов)
  • используя Spring Язык выражений .NET (который является кратким, легко документируется и учится, но на удивление мощным).

EDIT 2 июня 2011 года: IronJS также может быть подходящим кандидатом, там Hanselminutes, который говорит об этом через.

Ответ 2

Взгляните на PowerShell.

Он позволяет вам программировать простые командлеты, доступные для сценариев. Он также поддерживает иерархические контейнеры (по умолчанию у вас есть файловая система, реестр, хранилище сертификатов и т.д.).

Ответ 3

Я бы предложил вам рассмотреть динамический язык Runtime как стратегию для реализации интерфейса сценариев. Подробности:

В настоящее время DLR поддерживает IronPython и IronRuby, а также ряд других реализаций языка можно найти на CodePlex. Если вы заинтересованы в создании языка, специфичного для вашего приложения, Bitwise Magazine имеет хороший праймер статья.

Dino Viehland PDC09 session Использование динамических языков для создания приложений для сценариев стоит посмотреть. Вы можете найти демо-код здесь.

Ответ 4

Язык сценариев Lua является бесплатным, используется в большом количестве коммерческих приложений и легко встраивается в приложение .NET, используя свободно -available LuaInterface, которая позволяет вам выявлять типы и методы из вашего приложения, которые могут использовать скрипты в встроенном интерпретаторе.

Учебник по встраиванию Lua в приложение С# можно найти здесь.

Изменить: возможно, также стоит отметить, что Lua был разработан с нуля, чтобы быть встроенным языком сценариев, и, как результат, интерпретатор очень настраивается. Приложение-хост может ограничивать практически любой аспект возможностей интерпретации как часть модели безопасности; например позволяя или предотвращая скрипты от сетевых подключений или записи в файлы и т.д.

Кроме того, вы спрашивали о внешних скриптах. Сделать вашу программу доступной для внепроцессных сценариев выполняется так же, как вы делаете ее доступной для внепроцессных приложений: путем предоставления стандартизованного интерфейса автоматизации через какой-то протокол связи. В Windows для однопроцессорной межпроцессной связи это чаще всего будет COM, но это также может быть WCF, удаленный TCP, RPC или любое количество других стандартов связи. То, что вы решите сделать, в значительной степени зависит от того, как создается ваше приложение и какой внешней автоматизации вы намерены делать.

Ответ 5

Для свободного, простого в использовании языка .NET взгляните на С#.

Посмотрите мой ответ на аналогичный вопрос.

Как для отображения данных, видя, как это язык .NET, вам просто нужно добавить свою программу в сборки, чтобы связать и сделать соответствующие классы общедоступными.

Ответ 6

Я использовал CS- Script, чтобы создать что-то подобное. В моем случае я определил интерфейс в своем приложении. A script, а затем просто необходимо реализовать этот интерфейс, чтобы он мог запускаться из приложения. Мое приложение касалось обработки отсканированных изображений, поэтому мой интерфейс выглядел примерно так:

public interface ICustomModule
{
    void ProcessBatch(IBatch batch)
}

Таким образом, мой script мог получить доступ к объектной модели, которую я определил в своем приложении (в моем случае через IBatch). Хорошо, что во время разработки я мог использовать обычный проект библиотеки классов для script: IntelliSense, отладка... Я не помню точных данных, но в основном у меня был переключатель в моем приложении, в котором говорится, что приложение использует указана библиотека классов вместо script.

Кроме того, я сделал дополнительный интерфейс, который позволил настроить сценарии: script мог определить набор свойств, которые затем были отображены моим приложением в сетке свойств. Я думаю, что я использовал эту версию здесь, поскольку в то время это казалось немного более гибким. Таким образом, вы не только разрешите пользователям настраивать script, но также можете предоставить помощь в виде описаний, вариантов, значений по умолчанию... Сетка свойств довольно расширяема: в одном случае у нас был script, который будет отображать специальную форму для определения некоторых сложных настроек.

Edit: В приложении, конечно, не было ссылки на библиотеку классов "debug". Просто нужно загрузить сборку...

Ответ 7

Я не уверен, что это покроет ваши потребности, но через отражение вы можете скомпилировать код С# и выполнить его во время выполнения (пример кода здесь).

Итак, вы можете написать script, например. С#, а затем скомпилировать его "на лету" и запустить его непосредственно в контексте вашего приложения. Конечно, вы должны учитывать соображения безопасности, но если скрипты доверяют, то это может сработать для вас, и вы получите преимущества использования мощного управляемого языка для ваших скриптов.

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

Ответ 8

Я реализовал CS- Script, так как платформа сценариев для системы документооборота была написана мной. Каждый необходимый wrokflow имел разные условия, которые диктовали, что пользователи будут подписываться на различные задачи и кто будет получать электронные письма. С помощью модели сценариев стало легко вводить новые шаги в рабочие процессы и обрабатывать уникальные требования, которые требуются для этих задач.

Другим приятным продуктом модели сценариев было то, что рабочие процессы можно было протестировать в самых разных условиях, и можно было бы использовать итеративный подход для завершения поведения рабочего процесса. Во время QA и тестирования приёма пользователей я включил функции регистрации в сценариях, чтобы я мог легче искать проблемы.

С CS- Script у вас есть полный доступ к вам; то есть, когда ваш script импортирует ваши сборки, вы можете создать экземпляр своего объекта в коде script. Кроме того, вы можете сохранить свои скомпилированные скрипты и просто предоставить им параметры. Если ваши сборки используют объект параметров или словарь, вы можете передать это script и выполнить методы объектов, содержащихся в объекте параметра.