IFormFile 未从程序集“Microsoft.AspNetCore.Http 3.0”加载类型 Microsoft.AspNetCore.Http.Internal.FormFile'

Posted

技术标签:

【中文标题】IFormFile 未从程序集“Microsoft.AspNetCore.Http 3.0”加载类型 Microsoft.AspNetCore.Http.Internal.FormFile\'【英文标题】:IFormFile not load type Microsoft.AspNetCore.Http.Internal.FormFile' from assembly 'Microsoft.AspNetCore.Http 3.0'IFormFile 未从程序集“Microsoft.AspNetCore.Http 3.0”加载类型 Microsoft.AspNetCore.Http.Internal.FormFile' 【发布时间】:2020-03-13 05:06:41 【问题描述】:

使用 IFormFile 时,我在运行时收到此错误:

无法从程序集“Microsoft.AspNetCore.Http, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60”加载类型“Microsoft.AspNetCore.Http.Internal.FormFile”。

我已经尝试添加包:

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
<PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="3.0.0" />
<PackageReference Include="Microsoft.Net.Http.Headers" Version="2.2.0" />
using Microsoft.AspNetCore.Http.Internal;
IFormFile f = new FormFile(memoryStream, 0, memoryStream.Length, "test", "test.pdf");

FormFile Aspnetcore 3.0 的文档存在。但是,当检查我的 sdk 时,而不是使用 3.0.它仅在 .net core 2.2 中可用。我安装了 2.2 和 3.0 版本

区域组装 Microsoft.AspNetCore.Http,版本=2.2.0.0,文化=中性,PublicKeyToken=adb9793829ddae60

// C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.http\2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll
#endregion

using System.IO;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;

namespace Microsoft.AspNetCore.Http.Internal

    public class FormFile : IFormFile

【问题讨论】:

您是否尝试将您的引用更新为全部为3.0.0http 2.2.2http.features 3.0.0 可能是问题所在 感谢您的评论,我找不到Microsoft.AspNetCore.Http 3.0.0版,nuget.org/packages/Microsoft.AspNetCore.Http 这可能是 X-Y 问题。只是好奇:为什么要通过new FormFile 手动创建IFormFile 实例? 我正在调用一个返回文件的 api,我必须再次将其发送到另一个接收 IFormFile 的 api @Exec21 如果是这种情况,则无需调用FormFile。刚刚通过HttpClient发送了一个文件。 【参考方案1】:

我遇到了同样的错误,找不到与此错误直接相关的任何内容,经过两天与此问题的斗争,我终于找到了解决方案。

当您尝试实例化 FormFile 或 FormFileCollection 类时会出现此问题。如果项目没有对Microsoft.AspNetCore.App的框架引用,则会抛出上述错误。

解决方案:

Microsoft.AspNetCore.App 框架引用需要手动添加,无论哪个项目正在实例化 FormFile 或 FormFileCollection 类。

 <ItemGroup>
     <FrameworkReference Include="Microsoft.AspNetCore.App" />
 </ItemGroup>

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#framework-reference

【讨论】:

【参考方案2】:

我在 .NET 5 下,@RL89 的解决方案在概念上有效,但实际上它发生了变化。

您需要将 *.csproj 文件中的第一行更改为:

<Project Sdk="Microsoft.NET.Sdk.Web">

注意它是 Microsoft.NET.Sdk .Web

除非您有 main 方法,否则您的解决方案将无法编译。我只是像这样创建了一个假的 Program.cs

namespace MyClassProjThatTurnedIntoWebProject

    using System;

    public class Program
    
        public static void Main(string[] args)
        
            throw new NotImplementedException("This project is not meant to be run. https://***.com/a/67097605/828184");
        
    

然后我可以做一些有趣的事情,比如像这样创建一个新的 FormFile():

FormFile file;
string path = "/file/path.json";
using (var stream = System.IO.File.OpenRead(path))

    file = new FormFile(stream, 0, stream.Length, null, Path.GetFileName(stream.Name));

【讨论】:

以上是关于IFormFile 未从程序集“Microsoft.AspNetCore.Http 3.0”加载类型 Microsoft.AspNetCore.Http.Internal.FormFile'的主要内容,如果未能解决你的问题,请参考以下文章

前端 (HTML) 未从 Microsoft Azure 中的 mysql 数据库获取 Spring Boot 应用程序中的数据

未从实时 ETW 消费者接收 Microsoft-Windows-Kernel-Process 事件

为啥 IFormFile 显示为空,我该如何解决?

IFormFile 始终为空(带有 MVC/Razor 的 ASP.NET Core)

我在 .net 5 api 应用程序中有两个具有一对多关系的模型。子模型包含 IFormFile 属性。我无法绑定此属性

EventLogPropertySelector 未从 PowerShell 中的事件对象返回扩展数据