c# - 为什么在 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 会导致错误。我怎么解决这个问题?
解决方案
这是预期的。
由于您使用的部署方法(自包含),dotnet publish
不仅会复制所有托管程序集,还会复制本机依赖项,例如api-ms-win-core-console-l1-1-0.dll
. 这些原生依赖无法通过反射加载到应用程序域中,因此异常是完全正常的。
你有几个选项来解决它,
- 捕获异常并忽略它。
- 或者主动检查 dll 是原生的还是使用PEFile 类和相关管理的。
推荐阅读
- python - #python products #barcode_recognition /将结果保存到Excel文件
- angular - 如何避免输入类型文件添加多个文件?
- c# - 如何以编程方式为 GridView 设置 Android:layout_width 和 Android:layout_height
- python - docker build image 在 PyCharm 中不起作用
- tcp - 从 iperf2 输出中提取上传和下载带宽
- select - 为什么向我的查询添加条件会导致 ORA-00934 错误消息?
- java - Thymeleaf 客户端验证
- angular - 一个组件中的多个服务
- apache-spark - 如何在没有 Hadoop 的情况下让 Spark 在 Windows 10 上运行?
- networking - 在 ifcfg-eth0 中设置静态 ip 后 GCP 上的虚拟机丢失网络