Как практика вызывать основную функцию приложения из загруженной dll?C#

Место общения программистов C#
Anonymous
Как практика вызывать основную функцию приложения из загруженной dll?

Сообщение Anonymous »

У меня есть старое приложение Delphi 7 с библиотекой FastScript. Это приложение может компилировать код среды выполнения из текста и вызывать импортированные методы из основного приложения.
Мне нужно создать эту функцию для моего веб-приложения, написанного на C# и работающего на .NET 10 с использованием Blazor.
Я могу скомпилировать сборку из текста в памяти и вызвать метод Main из скомпилированной сборки. Метод Main записывает данные в консоль моего веб-приложения.
Ассемблерный код:

Код: Выделить всё

using System;

public class MyAssemblyClass
{
public static void Main(string[] args)
{
Console.WriteLine("hello world");
}
}
Вызов метода сборки Main из веб-приложения:

Код: Выделить всё

SyntaxTree parsedSyntaxTree = Parse(textsource, "", CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp12));
CSharpCompilation? compilation = CSharpCompilation.Create(Frame.AssemblyClassName, [parsedSyntaxTree], DefaultReferences, exe_DefaultCompilationOptions);

EmitResult result = default!;
Exception? exception = default!;

using (var ms = new MemoryStream())
{
try
{
result = compilation.Emit(ms);

if (result.Success)
{
Type? FrameType = CompilleType(ms, Frame);

if (FrameType != null)
{
object obj = Activator.CreateInstance(FrameType);
FrameType.InvokeMember("Main",
BindingFlags.Default | BindingFlags.InvokeMethod,
null, obj, new object[]{});
}
else
throw new Exception("Invoke error.");
}
}
catch (Exception ex)
{
exception = ex;
}
}
Мне нужно экспортировать некоторый метод из моего веб-приложения в мою сборку и вызвать этот метод.
UPD:
В моем приложении есть веб-страница для пользователя с таблицей динамических данных и простая операция CRUD с данными. Мне нужен механизм расширения для администраторов с такими функциями, как «BeforeLoadData», «AfterLoadData», «BeforeSaveData»... и т. д.
В этой функции администраторы приложений могут писать код расширения C# для манипулирования таблицей данных в контексте выполнения. Данным функционалом обладают многие приложения типа "САП, 1С"

Вернуться в «C#»