Функция Azure, EF Core, не удается загрузить ComponentModel.Annotations 4.2.0.0 - PullRequest
0 голосов
/ 15 мая 2018

Я создал несколько библиотек .Net Standard 2.0, протестировал выполнение с помощью консольного приложения, а также несколько тестов - все хорошо.

Перейдите к функции Azure и получите следующее время выполненияошибка: enter image description here

Затем я пытаюсь загрузить эту конкретную версию в проект функции API: enter image description here

Я используюVisual Studio версии 15.7.0 Preview 5.0.Я обновил функцию Azure до 4.7 ... так как консольный и тестовый проекты - и они работают.

Это слишком много часов ... поэтому я надеюсь, что разрешение не является чем-топсих.Ef Core 2.1.0-rc1-final также в миксе.Использование аннотаций данных для обязательных, MaxLength, NotMapped.

Ошибка в графическом виде: Microsoft.EntityFrameworkCore: не удалось загрузить файл или сборку 'System.ComponentModel.Annotations, версия = 4.2.0.0

Ответы [ 5 ]

0 голосов
/ 03 июля 2019

Принятый ответ вызовет утечку ЦП из-за +=, если он используется не по назначению, и остановит ваше функциональное приложение. Если вы используете IoC, лучше использовать синглтон. Здесь:

public class FunctionsAssemblyResolver
{
    static FunctionsAssemblyResolver()
    {
        AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
    }

    // At least one static member needs to be invoked in order to execute the static constructor,
    // but it will only run the constructor once.
    public static void StaticInstance() { }

    private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var requestedAssembly = new AssemblyName(args.Name);
        try
        {
            // Feel free to resolve any other assemblies, but this will take care of Annotations
            return requestedAssembly.Name == "System.ComponentModel.Annotations"
                ? Assembly.Load(requestedAssembly.Name)
                : null;
        }
        catch
        {
            // do nothing
        }

        return null;
    }
}

Чтобы использовать, просто позвоните FunctionsAssemblyResolver.StaticInstance() до разрешения IoC. Это также может быть использовано для любого подхода без IoC.

0 голосов
/ 24 января 2019

Добавление последней ссылки ComponentModel в ваш проект с помощью команды nuget из консоли диспетчера пакетов решит эту проблему для всех типов приложений (Console / Web / Azure).

Install-Package System.ComponentModel.Annotations -Version 4.5.0

Начиная с ComponentModel не имеет версии 4.2.0.0 , поэтому попробуйте установить последнюю версию.Ссылка: -

Галерея Neget

0 голосов
/ 09 июня 2018

Я бы предложил запустить эту функцию ниже, как только вы запустите свою функцию Azure. Он перенаправит любую сборку в существующую версию.

public class FunctionsAssemblyResolver
{
    public static void RedirectAssembly()
    {
        var list = AppDomain.CurrentDomain.GetAssemblies().OrderByDescending(a => a.FullName).Select(a => a.FullName).ToList();
        AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
    }

    private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var requestedAssembly = new AssemblyName(args.Name);
        Assembly assembly = null;
        AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
        try
        {
            assembly = Assembly.Load(requestedAssembly.Name);
        }
        catch (Exception ex)
        {
        }
        AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
        return assembly;
    }

}
0 голосов
/ 06 июля 2018

У меня была та же проблема, и в результате я понизил пакет Microsoft.EntityFrameworkCore до версии 2.0.3, которая зависит от System.ComponentModel.Annotations 4.4.0, которая является пакетом Microsoft.NET.Sdk.Functions 1.0.14 требует.Если у вас есть явная зависимость от System.ComponentModel.Annotations 4.5.0 или выше, вам также необходимо понизить ее до 4.4.0.

0 голосов
/ 09 июня 2018

Я следовал инструкциям здесь:

https://codopia.wordpress.com/2017/07/21/how-to-fix-the-assembly-binding-redirect-problem-in-azure-functions/

И добавил следующий редирект:

"BindingRedirects": "[ { "ShortName": "System.ComponentModel.Annotations", "RedirectToVersion": "4.2.1.0", "PublicKeyToken": "b03f5f7f11d50a3a" } ]"

ПРИМЕЧАНИЕ: Это не v 4.5.0.0 ... Это на самом деле 4.2.1.0.

...