Расширение приложения.NET C# - создает пользовательский язык сценариев или нет?

Вы рассмотрели использование API JNA (позволяет Вам делать собственные вызовы к легкой операционной системе)?

можно назвать документацию win32 metod GetCurrentUser MSDN в http://msdn.microsoft.com/en-us/library/ms724432 (По сравнению с 85) .aspx. Это расположилось в Advapi32.dll.

Это также имеет unicode версию, GetCurrentUserW в случае необходимости.

И Вы правы. Действительно кажется, что переменная среды может быть изменена, так, чтобы мог ввести в заблуждение для использования.

я не уверен в кросс-платформенных последствиях по 32/64bit окнам. Если Вам нужно решение в коде, я уверен, что мог бы описать что-то для него.

, Но да, просто идея :)

12
задан cgyDeveloper 28 August 2009 в 14:20
поделиться

8 ответов

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

Майкл Форд с радостью расскажет об успехе IronPython в подобных случаях (особенно для него, для электронной таблицы). подкованные пользователи), и его книга содержит (IIRC) несколько указаний по размещению его в .NET.

16
ответ дан 2 December 2019 в 04:09
поделиться

Возможно, вы захотите взглянуть на Boo , другой управляемый язык, который работает в среде CLR и который особенно хорошо подходит для создания DSL и создания сценариев для ваших приложений.

Конвейер компиляции напрямую расширяется из самого языка.

Чтение Boo Manifesto - хорошая отправная точка, если вы хотите узнать о нем больше.

[ Edit ] Я забыл упомянуть, что Ayende Rahien пишет полную книгу по этой теме: Создание доменно-специфичных языков в Boo

10
ответ дан 2 December 2019 в 04:09
поделиться

Возможно, стоит рассмотреть PowerShell для такого рода задач. Он может вызывать .Net так же, как любой из языков DLR, и имеет более естественный язык для задач в концепции командлета (command-let). Вам нужно написать командлеты на скомпилированном языке на v1 - в v2, который развертывается, начиная с Win7 и работает над более ранними выпусками в ближайшие несколько месяцев (v2 для Vista / Win2k8 сейчас находится в RC), вы можете создать их непосредственно в PowerShell.

4
ответ дан 2 December 2019 в 04:09
поделиться

Я согласен с Марком Джи, хотя стоит упомянуть, что общая концепция - это язык, специфичный для домена. Хотя IronRuby / IronPython не являются строго специфичными для предметной области, они являются полнофункциональными, и вам придется продолжить работу над своей реализацией.

В Visual Studio есть инструменты DSL, и есть материал по грамматике «M», который вы можете найти в.

Но да, IronPython.

2
ответ дан 2 December 2019 в 04:09
поделиться

Из DSL, который вы собираетесь использовать, я бы рекомендовал использовать CUCUMBER с IronRuby.

С Cucumber тестеры пишут тесты, которые выглядят примерно так:

Scenario: See all vendors
Given I am logged in as a user in the administrator role
And There are 3 vendors
When I go to the manage vendors page
Then I should see the first 3 vendor names

Это очень легко приспособить этот язык к вашим потребностям. Просто погуглите "Cucumber and IronRuby", и вы найдете несколько руководств и сообщений в блогах, с которых можно начать.

2
ответ дан 2 December 2019 в 04:09
поделиться

Мы используем встроенный Iron Python для формулы ценообразования в одном из наших проектов. Вот как это выглядит на реальном примере.

E_DOCUMENT_CHECK = DCPAV * ADS_NUM
E_SPECIFIC_TAX = STV
E_RESOURCE_DEV = RDV
E_LP_ISSUANCE = LPIV
E_ANNUAL_FEES = APFCV * SA * SIDES_NUM
E_SERVICE_FEES= MAX(
MINSFV,
E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES)
TOTAL= E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES+E_SERVICE_FEES

Это действительно просто реализовать. Например, функция Max () - это всего лишь один из пользовательских методов C #, который мы импортируем в движок IronPython, и его естественно использовать в настройках конфигурации.

2
ответ дан 2 December 2019 в 04:09
поделиться

Вы могли бы просто использовать сам C # в качестве языка сценариев, как описано здесь CrowsProgramming - сценарии времени выполнения в .Net

0
ответ дан 2 December 2019 в 04:09
поделиться

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

Вы можете написать свой образец скрипта на IronRuby, и он будет выглядеть так:

TURN_POWER_ON
TUNE_FREQUENCY frequency
WAIT 5
if GET_FREQUENCY == frequency
  REPORT_PASS "Successfully tuned to " + frequency
else
  REPORT_FAIL "Failed to tune to " + frequency
end
TURN_POWER_OFF

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

window = find_window_on_desktop "OurApplication"
logon_button = window.find "Logon"
logon_button.click

list = window.find "ItemList"
list.should have(0).rows

add_button = window.find "Add new item"
add_button.click
list.should have(1).rows

Однако, при нынешнем положении дел IronPython гораздо более зрелый и имеет гораздо лучшую производительность, чем IronRuby, поэтому вы можете предпочесть его.

Я настоятельно рекомендую использовать IronPython или IronRuby вместо создания своего собственного языка ... Вы Сэкономит невообразимое количество усилий (и ошибок)

0
ответ дан 2 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: