Azure Функция не без сохранения состояния - PullRequest
2 голосов
/ 06 февраля 2020

У меня есть функция .NetCore 2 Azure (время выполнения 2) в плане потребления , которая использует отражение, загружает сборку в текущий домен (Assembly.LoadFrom()) и выполняет другие действия. с ним.

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

Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Да, без сохранения состояния, но ваш домен приложения будет оставаться загруженным неопределенно долго, пока вы не разгрузите его. Поскольку вы используете Azure Функции v2, это означает, что вы находитесь в стране. NET Core, то есть у вас нет AppDomain, который вы можете использовать. Тем не менее, вы можете использовать AssemblyLoadContext. Например:

public class FooContext : AssemblyLoadContext
{
    public FooContext() : base(isCollectible: true)
    {
    }
}

А теперь:

var myLoader = new FooContext();

var assembly = myLoader.LoadFromAssemblyPath("your-path");

// Now do stuff with "assembly" as you did before

Наконец, не забудьте очистить:

myLoader.Unload();
0 голосов
/ 10 февраля 2020

Azure функция не имеет состояния, и, как сказал Дэвид в комментариях:

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

Если вы все еще хотите загрузить его, вы можете попробовать использовать код ниже:

byte[] fileData = File.ReadAllBytes(dllPath);
Assembly asm = Assembly.Load(fileData);

Но этот код не может загрузить соответствующую сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...