Nuget包和ASP.Net核心应用程序之间的System.Net.Http依赖项不匹配 背景

Nuget包和ASP.Net核心应用程序之间的System.Net.Http依赖项不匹配 背景,asp.net,dll,asp.net-core,nuget-package,asp.net-core-middleware,Asp.net,Dll,Asp.net Core,Nuget Package,Asp.net Core Middleware,我正在尝试编写一些中间件来使用ASP.NET核心进行自定义身份验证。因为我依赖于使用.NET framework的一些专有代码,所以我使用的是ASP.NET Core的.NET framework版本,而不是ASP.NET Core的.NET Core版本 最初,我将中间件直接构建到ASP.NET核心应用程序中,并使用Nuget安装了我的专有依赖项。这很管用 接下来,我想构建一个Nuget包,这样我的中间件就可以由几个ASP.NET核心web服务在内部共享。因此,我创建了一个类库并添加了中间件代

我正在尝试编写一些中间件来使用ASP.NET核心进行自定义身份验证。因为我依赖于使用.NET framework的一些专有代码,所以我使用的是ASP.NET Core的.NET framework版本,而不是ASP.NET Core的.NET Core版本

最初,我将中间件直接构建到ASP.NET核心应用程序中,并使用Nuget安装了我的专有依赖项。这很管用

接下来,我想构建一个Nuget包,这样我的中间件就可以由几个ASP.NET核心web服务在内部共享。因此,我创建了一个类库并添加了中间件代码。我安装了各种ASP.NET核心Nuget软件包和我的专有Nuget软件包来解决依赖关系,并构建了Nuget软件包。我成功地在ASP.NET核心应用程序中安装了它

问题 当我尝试运行中间件时,我得到以下信息:
无法加载文件或程序集'System.Net.Http,Version=4.1.1.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。

ASP.NET核心应用程序似乎使用
System.NET.Http 4.0.0

尝试1 当然,我查看了类库的
System.Net.Http
依赖关系。它被放在一个Nuget包中,适当地命名为
System.Net.Http
。我成功地将该软件包安装到ASP.NET核心应用程序(或者它告诉我的那样)。我运行了应用程序,中间件也出现了同样的错误。困惑的我回去看了看Nuget的包裹<代码>系统.Net.Http丢失!我再次“成功”安装了它,但再次搜索该软件包时发现它没有安装

我禁用了自动包恢复,清除了Nuget缓存,然后重试。不走运。软件包认为它已成功安装,但从未真正起作用

以下是ASP.NET核心应用程序的project.json的相关部分:

{
  "dependencies": {
    "ProprietaryLibrary": "1.0",
    "Microsoft.AspNetCore.Authentication": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.1",
    "Microsoft.AspNetCore.Routing": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0",
    "MyMiddlewarePackage": "1.0.0",
    "ProprietaryDependency": "1.0.0",
    "ProprietaryDependency": "1.0.0",
    "System.Net.Http": "4.0.0" <--- This updates to 4.1.0 if I install that nuget package, but nothing really happens.
  },

  "frameworks": {
    "net461": { }
  }
}
没有任何引用
System.Net.Http

如果你对这个专有库感兴趣,这里是参考树。所有隐藏的内容都是专有的DLL。因此,我也没有看到任何
System.Net.Http
引用。我不是说它不在那里,但我看不见。即使有,为什么直接嵌入ASP.NET核心应用程序中的专有库可以正常工作

总结 我无法确定
System.Net.http4.1.1.0
引用的位置,也无法使ASP.Net核心更新使用比
4.0.0.0
更新的任何内容。但是,如果我粘贴代码并直接在ASP.NET核心应用程序中下载依赖项,一切都会正常工作

有什么想法吗

更新
问题似乎出在
Microsoft.AspNetCore.Authentication
Nuget包上。每次安装时,它都会使用新版本的
System.Net.Http
。有什么办法可以防止吗?

好吧,我想出来了。问题出在包
Microsoft.AspNetCore.Authentication

缩小范围后,微软似乎意识到了这个问题:。他们将在一个月内发布一个补丁,听起来像是


下面是修复它的提交:

好吧,我已经解决了。问题出在包
Microsoft.AspNetCore.Authentication

缩小范围后,微软似乎意识到了这个问题:。他们将在一个月内发布一个补丁,听起来像是

以下是修复该问题的提交:

{
  "dependencies": {
    "Microsoft.AspNetCore.Authentication": "1.0.0",
    "Microsoft.Extensions.Caching.Memory": "1.0.0",
    "Microsoft.Extensions.Options": "1.0.0",
    "Microsoft.Extensions.WebEncoders": "1.0.0"
  },

  "frameworks": {
    "net461": {
      "dependencies": {
        "ProprietaryLibrary": "1.0.0"
      }
    }
  }
}