为何在IIS发布上发生程序集加载错误

我创建了一个扩展方法,可以在asp.net核心Web api项目中找到接口实现。

    public static List<Type> FromAssembliesMatching<TType>(this AppDomain currentDomain,string searchPattern)
    {
        var referencedPaths = Directory.GetFiles(currentDomain.BaseDirectory,"*.dll").ToList();

        var assemblies = referencedPaths.Select(path => currentDomain.Load(AssemblyName.GetassemblyName(path)));

        var types = assemblies.SelectMany(s => s.GetTypes().Where(t =>
                typeof(TType).IsAssignableFrom(t)
                && !t.IsInterface
                && !t.IsAbstract))
            .ToList();

        return types;
    }

例如,找到IMyInterface实现的类型。这在开发应用程序时有效。

但是当我在iis上发布它时。

System.BadImageFormatException: Could not load file or assembly 'C:\publish\api-ms-win-core-console-l1-1-0.dll'.

扩展方法试图加载所有dll。我认为C#生成的dll会导致错误。我该如何解决这个问题?

einspei 回答:为何在IIS发布上发生程序集加载错误

这是预期的。

由于使用的部署方法(自包含),dotnet publish不仅复制了所有托管程序集,而且还复制了本地依赖项,例如api-ms-win-core-console-l1-1-0.dll。这些本机依赖项无法通过反射加载到应用程序域中,因此异常是完全正常的。

您可以通过多种方法来解决它,

  • 捕获异常并将其忽略。
  • 或者通过使用PEFile class and related主动检查dll是本地的还是受管理的。
本文链接:https://www.f2er.com/2476718.html

大家都在问