【发布时间】:2021-12-19 01:42:46
【问题描述】:
我正在尝试反编译ASP.NET Core WebApi 项目并从所有控制器中收集所有方法。当我的项目以.NETCore3.1 为目标时,它通过运行以下代码来工作:
Assembly assembly = Assembly.LoadFrom(assemblyPath); // assemblyPath pointed to .dll
var types = assembly.GetExportedTypes();
但是在更新到.NET5 之后,上面的第二行(assembly.GetExportedTypes())会抛出一个异常,即文件Microsoft.AspNetCore.Mvc.Core.dll 丢失。当我从一个旧项目(编译为 .NETCore3.1)手动复制该文件时,它起作用了!
最重要的是,当项目更复杂时,具有 EFCore 依赖项等等......在.NET5 下编译项目时会丢失更多文件。它们是:
- Microsoft.Extensions.Hosting.Abstractions.dll
- Microsoft.AspNetCore.Mvc.Abstractions.dll
- Microsoft.AspNetCore.Authentication.Abstractions.dll
我有两个问题:
- 为什么这些文件没有复制到输出文件夹?
- 如何正确读取具有
ASP.NET WebApi编译二进制文件的控制器中的所有端点/方法?我做错了什么吗?
重现步骤:
- 创建以
.NET5为目标的ASP.NET Core WebApi项目。 - 创建其他以 .NET5 为目标的项目并实现这两行:
var assemblyPath = "C:\\Projects\\Other\\DotNet5Test\\DotNet5Test\\DotNet5Test.WebApi\\bin\\Debug\\net5.0\\DotNet5Test.WebApi.dll"; Assembly assembly = Assembly.LoadFrom(assemblyPath); var types = assembly.GetExportedTypes();
- 运行它
编辑:
我尝试从 nuget 添加 Microsoft.AspNetCore.Mvc.Core,但 Microsoft.AspNetCore.Mvc.Core.dll 未添加到输出文件夹中
【问题讨论】:
-
永远不要再手动添加 dll - 这就是我们拥有包管理器的原因
-
@riffnl 我不确定你的意思。创建整个票证是因为我不想手动添加这些 dll。我只是指出 当我手动复制该文件时它起作用了。不幸的是,当我通过 nuget 添加这个包时,dll 仍然没有包含在输出文件夹中,这是我的问题。
标签: c# asp.net-core reflection asp.net-core-webapi .net-5