首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Azure函数,EF核心,无法加载ComponentModel.Annotations 4.2.0.0

Azure函数,EF核心,无法加载ComponentModel.Annotations 4.2.0.0
EN

Stack Overflow用户
提问于 2018-05-15 12:38:26
回答 4查看 11.2K关注 0票数 20

我已经创建了几个.Net标准2.0库,通过一个控制台应用程序测试了执行情况,以及几个测试-一切都很好。

移动到azure函数,并得到以下运行时错误:

然后,我尝试将该特定版本下载到API函数项目中:

我使用的是Visual Studio版本15.7.0预览版5.0。我已经将Azure函数更新到4.7...就像控制台和测试项目一样--这些都是可以工作的。

在这上面呆了太多小时了..所以我希望这个决议不是什么疯狂的事情。Ef Core 2.1.0-rc1-final也在其中。使用Required、MaxLength、NotMapped的数据注释。

图形错误: Microsoft.EntityFrameworkCore:无法加载文件或程序集的System.ComponentModel.Annotations,Version=4.2.0.0

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-10 01:42:40

我建议你一旦启动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;
    }

}
票数 25
EN

Stack Overflow用户

发布于 2018-06-09 12:23:44

我按照这里的说明操作:

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" } ]"

注意:它不是4.5.0.0...它实际上是4.2.1.0。

票数 8
EN

Stack Overflow用户

发布于 2019-07-03 23:36:22

如果+=被误用,接受的响应将导致CPU泄漏,并将使您的函数应用程序停止运行。如果您使用的是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;
    }
}

要使用,只需在任何IoC解析之前调用FunctionsAssemblyResolver.StaticInstance()即可。这也可以用于任何非IoC方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50342416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档