【问题标题】:Microsoft libraries missing when compiling .NET5 project编译 .NET5 项目时缺少 Microsoft 库
【发布时间】: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


【解决方案1】:

过去,我在各种项目中偶尔遇到过类似的问题。对我来说最可靠的解决方案是通过 nuget 数据包管理器安装任何有问题的库。在执行此操作之前删除您手动添加的所有依赖文件。

【讨论】:

  • 我尝试从 nuget 显式添加Microsoft.AspNetCore.Mvc.Core,但这没有用。 Microsoft.AspNetCore.Mvc.Core.dll 未添加到输出中
【解决方案2】:

我认为问题在于 Microsoft.AspNetCore.Mvc.Core.dll 作为依赖于框架的部署 (FDD) 而不是自包含部署 (SCD) 的一部分提供,请参阅已接受的答案 Is there any GAC equivalent for .NET Core?

鉴于我看到您之前发布的这个问题,How to retrieve Controller methods from WebApi binaries? 我感觉您正在尝试从针对 .net 5 的 wpf 应用程序执行代码,但该应用程序无法使用 FDD 来解析程序集。

答案可能是您需要更改您的 webapi 应用程序以使用 SCD 部署模型,但未将 SCD 用于 web 应用程序也许 google 会有所帮助。

【讨论】:

  • 我宁愿找到一种方法,从以标准 (FDD) 方式部署的二进制文件中获取这些控制器方法,然后进行 SCD 部署。这是我为我的 API 构建的自定义诊断工具
  • 我明白,但我猜要么需要重新编写框架,你可以尝试为此提供支持票,或者复制缺失的程序集的自定义后期构建任务。我不是这两个 tbh 的粉丝。
猜你喜欢
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多