Как освободить загруженную сборку CSharpScript в случае сбоя?

Я на самом деле пытаюсь оценить выражение через CSharpScript"s EvaluateAsync, Оценка выражения работает нормально, но, поскольку я загружаю внешнюю сборку, похоже, что CSharpScript.EvaluateAsyncВыдает исключение, это не освобождает твой ресурс файла.dll.

Если я вручную пытаюсь удалить файл.dll после оценки, система, конечно, говорит, что в настоящее время он используется другим процессом. Я пытался подать заявку usings везде, где они применяются, но, похоже, никто не реализует IDisposable,

Это мой фактический код:

public static async Task<object> EvaluateExpression(string expression)
{
    string libRoute = Path.Combine(dllPath, BlackMagic.Provider.GetDllName());
    var userAssembly = BlackMagic.Provider.LoadAssembly(libRoute);

    var scriptOptions = ScriptOptions.Default
                                    .WithReferences(typeof(System.Dynamic.ExpandoObject).Assembly)
                                    .WithReferences(typeof(System.Collections.Generic.Dictionary<string, object>).Assembly)
                                    .WithReferences(typeof(Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo).Assembly)
                                    .WithReferences(typeof(System.Object).Assembly)
                                    .WithReferences(userAssembly)
                                    .WithEmitDebugInformation(true)
                                    .WithImports(new string[] { "System.Math", "System.Collections.Generic" });

    var type = BlackMagic.Provider.GetType(userAssembly);
    var obj = Activator.CreateInstance(type);

    object result = await CSharpScript.EvaluateAsync(expression, scriptOptions, globals: obj);
    return result;
}

Есть идеи? Я просто хочу убедиться, что смогу заменить / отредактировать / что угодно.dll.

Заранее спасибо.

0 ответов

Другие вопросы по тегам