powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Pascal Script(или другой) на Asp.Net C#
25 сообщений из 59, страница 2 из 3
Pascal Script(или другой) на Asp.Net C#
    #39702266
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Я правильно понял, что всё таки примера "Hello World" на JS у тебя нет?
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702280
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BPetro123,

Я правильно понял, что всё таки примера "Hello World" на JS у тебя нет?
Ты сегодня агрессивный.
Вставил батник в студию, Lua пропустил и занялся JS который на другой ветке форума.
Тебе дело делать или подкалывать?
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702281
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, не надо вставлять в студию js или другой скриптовый язык.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702376
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BКонечно, если скрипт можно сделать на самом C# будет лучше.
упрощенный пример вызова скрипта на C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;

namespace MinCsScript
{
    class Program
    {
        static void Main(string[] args)
        {
            // текст нашего скрипта:
            string codeText = "System.Console.WriteLine(\"Hello, World!\");";

            // в этом примере будет тупо вызываться 1-й метод 1-го найденного в коде класса
            // т.к. наш скрипт содержит "чистый" код, нужен префикс с классом и методом
            // метод может иметь параметры и возвращать значение, для простоты - их нет
            // также в префикс имеет смысл добавить uses и т.д. и т.п
            string codePrefix = "public class MyClass { public void MyMethod() {"; // можно сменить возвращаемый тип на object, string и т.п.
            string codeSuffix = "} }";
            codeText = codePrefix + Environment.NewLine + codeText + Environment.NewLine + codeSuffix;

            var provider = new CSharpCodeProvider();
            // для использования классов из опр. сборки нужно её подключить 
            //var parameters = new CompilerParameters(new string[] { "MinCsScript.exe", "System.dll", "System.Windows.Forms.dll" });
            var parameters = new CompilerParameters(new string[] { "System.dll" })
            {
                GenerateInMemory = true,
                IncludeDebugInformation = true,
                //GenerateExecutable = true,
                //OutputAssembly = "",
            };
            // компилируем код
            // (несколько членов массива string[] рассматриваются как несколько разных файлов с исходниками)
            var results = provider.CompileAssemblyFromSource(parameters, new string[] { codeText });
            if (results.Errors.HasErrors)
            {
                foreach (CompilerError err in results.Errors)
                {
                    System.Console.WriteLine("Error at line {0} column {1}: {2}", err.Line, err.Column, err.ErrorText);
                }
                Console.ReadKey();
                return;
            }
            var dll = results.CompiledAssembly;
            var types = dll.GetTypes();
            if (types.Length != 0)
            {
                // создаём объект первого попавшегося типа из скрипта
                var mytype = types[0];
                var myobj = Activator.CreateInstance(mytype);

                // смотрим все имеющиеся методы
                var methods = mytype.GetMethods();
                if (methods.Length != 0)
                {
                    // выполняем первый попавшийся метод
                    var entry = methods[0];
                    object result = null;
                    // создадим массив со значениями входных параметров по списку имеющихся параметров
                    //var mparams = entry.GetParameters();
                    //object[] oparams = new object[mparams.Length];
                    // заполним массив входных параметров
                    // ...
                    object[] oparams = null;
                    try
                    {
                        result = entry.Invoke(myobj, oparams);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Exception: {0}", ex.Message);
                        Console.ReadKey();
                        return;
                    }
                    // показываем результат вызова метода
                    //Console.WriteLine(result == null ? "Result is null" : result.ToString());
                    Console.ReadKey();
                }
            }
        }
    }
}

...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702377
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с такими простыми скриптами на C# главная проблема - обеспечить безопасность, т.к. скриптописателю может предоставиться слишком много разных возможностей...
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702384
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1Gс такими простыми скриптами на C# главная проблема - обеспечить безопасность, т.к. скриптописателю может предоставиться слишком много разных возможностей...
+1
Это считай программирование, только сложнее в квадрате. Хакерство.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702425
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1G, спасибо!
Весьма интересно
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702626
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovL1G, спасибо!
Весьма интересно
+1
Думаю, так и буду делать.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702640
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1Gс такими простыми скриптами на C# главная проблема - обеспечить безопасность, т.к. скриптописателю может предоставиться слишком много разных возможностей...
1. По поводу безопасности - человек, имеющий доступ к серверу и БД(тем более - административный) обладает всеми необходимыми правами, что бы обойти любую безопасность.

2. Если я правильно понял, то я должен там подключать сборки через строку.
Соответственно, на входе только текст, а сборки уже подключаются только те которые захочу я.
Код: c#
1.
var parameters = new CompilerParameters(new string[] { "System.dll" })


3. п.2 делается не сколько для безопасности, а что бы говнокода была меньше.
По моему замыслу скрипт это текст, ограниченный операторами. Чем меньше - тем лучше(до разумного минимума).
Код: c#
1.
 if (Amount<0) Color=Red else Color=Green //это должен быть предел сложности для скрипта.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702772
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,
да, сборки подключаются только те, которые прописаны в параметрах

но вам скорее всего придется прописать туда что-то из ваших сборок
(если скрипт должен иметь доступ не только к стандартным типам фреймворка)
тогда скрипт будет иметь доступ ко всему публичному в них
(и даже к protected, если в нем описать наследника вашего класса:
если добавить в скрипт постфикс (в примере - "} }") то можно "сбежать из песочницы" описанных в префиксе класса и метода)

один из простейших вариантов "защиты" - черный список запрещенных в скрипте слов и предварительный парсинг скрипта с его проверкой. вплоть до запрета символа "}" ))

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

(так можно дойти и до своего DSL-языка, транслируемого в C#)

есть набросок такого тег-реплейсера с построением карты соответствий позиций в исходном и "оттранслированном" тексте
это нужно для "подсветки" ошибок в тексте именно вашего скрипта (не "оттранслированного") исходя из позиций ошибок, выдаваемых компилятором
интересно?
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702781
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1G,
Ужос. Но он вроде говорил что все пользователи у него с админскими правами. Тогда пофигу.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702838
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1G,

Сперва спасибо за ответ)
L1Gно вам скорее всего придется прописать туда что-то из ваших сборок

Да, именно так я и хотел. Ты догадался о всём без слов)
L1Gодин из простейших вариантов "защиты" - черный список запрещенных в скрипте слов и предварительный парсинг скрипта с его проверкой. вплоть до запрета символа "}" ))

Я не уверен, что сейчас буду заниматься проблемой защиты от самого себя) Потом может нужно подумать, а сейчас пока надо заставить это всё заработать) Пока главное, что бы этим было быстро и удобно пользоваться.
L1Gесть набросок такого тег-реплейсера...интересно?
Видимо у тебя уже есть аналогичный опыт) Если ты считаешь, что они наброски могут быть полезны, выкладывай можно посмотреть.
Я так понял,что в результате это всё равно сводиться к String.Replace перед обработкой скрипта.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702840
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял, что именно Pascal-script отсутствует на платформе .NET.
Но зато есть много альтернатив вроде приведённых:
IronPyton
IronJS
C# Script - Как оказалось встроенного в сам C#
И некий LUA - В котором Hello world в консоль я так и не понял как вывести.

Так тоже неплохо - есть куда копать)
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702841
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,
вот проектик с окном "редактора скрипта"
заменялка - в классе TokenReplacer
внизу - таблица для списка ошибок, выдаваемых компилятором, можно даже подсветить место каждой ошибки (двойным кликом по строке)
всё осталось на игрушечном уровне (в работу не пошло, почему-то решили использовать Lua)

для передачи скрипту контекста навскидку можно использовать параметры метода (жестко прописать их в префиксе), хотя могут найтись и другие способы
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702848
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, спс)
Оказывается, не только мою голову посещают такие мысли)
Напрашивается вывод, что после месяца танца с бубном я тоже переду на LUA)
L1Gвнизу - таблица для списка ошибок, выдаваемых компилятором

Я так это себе и представлял +-
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702849
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,
на Lua придется повозиться с интеграцией (доступом из скрипта к куче разных полей/свойств/методов ваших объектов), а c C# вообще ничего и делать-то не нужно (ну, почти)
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702897
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1GLua придется повозиться с интеграциейкак раз это правильно чтобы не было лапшекода по архитектуре.
Скрипты - плагины не перемешивают с БЛ основного приложения.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702899
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BLua, В котором Hello world в консоль я так и не понял как вывести.не видно что ты пробовал в этом треде.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39702900
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BЯ так понял, что именно Pascal-script отсутствует на платформе .NET.в дельфях тоже это используют на мизерном количестве проектов.
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39703004
Фотография Монитор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

Попробуй Microsoft ClearScript (поддерживает JavaScript и VBScript). Если собирать вручную не хочется, то можно установить неофициальный NuGet-пакет .
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39703256
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай: если нужен JScript, VB или даже С++ - мой простой способ тоже работает.
просто заменить в примерах CSharpCodeProvider на другой *CodeProvider
(еще соответствующие using и референс на сборку
и, конечно, префикс с суффиксом)
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39703257
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1G,

"мой способ" :)
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39703381
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BОк, спс)
Оказывается, не только мою голову посещают такие мысли)
Напрашивается вывод, что после месяца танца с бубном я тоже переду на LUA)
L1Gвнизу - таблица для списка ошибок, выдаваемых компилятором

Я так это себе и представлял +-

вопрос в другом - во всю бизнес-логику распихать места, в которых могут вызываться функции, нарисованные пользователем; это сначала - а потом когда эти юзерские расширения начнут драться между собой и приводить к неустойчивой работе всей системы в целом - как это отлаживать.....
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39703648
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakovкак это отлаживать.....не вижу особых трудностей реализовать формирование из скриптов файлов (лучше - 1 файла) *.cs, которые можно добавлять к остальным исходникам проекта. и в режиме отладки заменять компиляцию скриптов на загрузку готовой сборки.
тогда можно отлаживать как обычно

btw, насчет С++ я погорячился. не компилит его СppCodeProvider (
...
Рейтинг: 0 / 0
Pascal Script(или другой) на Asp.Net C#
    #39703824
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1GVladimir Baskakovкак это отлаживать.....не вижу особых трудностей реализовать формирование из скриптов файлов (лучше - 1 файла) *.cs, которые можно добавлять к остальным исходникам проекта. и в режиме отладки заменять компиляцию скриптов на загрузку готовой сборки.
тогда можно отлаживать как обычно

btw, насчет С++ я погорячился. не компилит его СppCodeProvider (

Если включать код юзера в проект - размывается зона ответственности и соответственно - кто покрывает убытки в случае проблем. То есть, при применении технологии вылезают организационные проблемы. а так да можно дать юзеру заменять dll в которой ф-ции по перечню которые основной код дергает в триггерных точках..... и пусть хоть на чем хотят на том и кастомизируют.
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 2 из 3
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Pascal Script(или другой) на Asp.Net C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]