添加.NET Standard 2.0依赖项后找不到System.Net.Http.Formatting.MediaTypeFormatter.get_SupportedMediaTypes()的方法

Bru*_*sen 39 c# .net-standard-2.0

我有一个.NET Framework 4.6.1 WebApi项目,该项目引用了我们在内部用于共享常用实用程序方法的小型NuGet包.

我们想开始将一些东西移植到.NET Core,因此我将实用程序包更改为目标.NET Standard 2.0.这是通过简单地创建一个新的.NET Standard 2.0项目并复制源文件来完成的.

实用程序包csproj:

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

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

在我的WebApi项目中更新包后,我在启动时收到以下异常:

[MissingMethodException: Method not found: 'System.Collections.ObjectModel.Collection`1<System.Net.Http.Headers.MediaTypeHeaderValue> System.Net.Http.Formatting.MediaTypeFormatter.get_SupportedMediaTypes()'.]
   MyWebApiProject.Application.InitializeHttpConfiguration(HttpConfiguration config) in C:\MyWebApiProject\Global.asax.cs:44
   System.Web.Http.GlobalConfiguration.Configure(Action`1 configurationCallback) +34
   MyWebApiProject.Application.OnApplicationStarted() in C:\MyWebApiProject\Global.asax.cs:62
   Ninject.Web.Common.NinjectHttpApplication.Application_Start() +183

[HttpException (0x80004005): Method not found: 'System.Collections.ObjectModel.Collection`1<System.Net.Http.Headers.MediaTypeHeaderValue> System.Net.Http.Formatting.MediaTypeFormatter.get_SupportedMediaTypes()'.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +10104513
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +173
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): Method not found: 'System.Collections.ObjectModel.Collection`1<System.Net.Http.Headers.MediaTypeHeaderValue> System.Net.Http.Formatting.MediaTypeFormatter.get_SupportedMediaTypes()'.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +10085804
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +95
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254
Run Code Online (Sandbox Code Playgroud)

唯一的变化是packages.config和csproj中的版本号.

有任何想法吗?

谢谢!

Bru*_*sen 85

原来只需要绑定重定向到System.Net.Http:

<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

  • 你能解释为什么这是必需的吗?这是一个好习惯吗? (3认同)
  • 问题来自对如何混合.Net框架和.Net框架的限制.我相信你会找到问题的简短描述以及如何在[this github issue](https://github.com/dotnet/standard/issues/613)中快速获取Visual Studio自动生成的绑定.请参阅[这一个](https://github.com/dotnet/standard/issues/481)获取详细的地形. (3认同)