Как освободить загруженную сборку CSharpScript в случае сбоя?
Я на самом деле пытаюсь оценить выражение через CSharpScript
"s EvaluateAsync
, Оценка выражения работает нормально, но, поскольку я загружаю внешнюю сборку, похоже, что CSharpScript.EvaluateAsync
Выдает исключение, это не освобождает твой ресурс файла.dll.
Если я вручную пытаюсь удалить файл.dll после оценки, система, конечно, говорит, что в настоящее время он используется другим процессом. Я пытался подать заявку using
s везде, где они применяются, но, похоже, никто не реализует 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.
Заранее спасибо.