Nuget包和ASP.Net核心应用程序之间的System.Net.Http依赖项不匹配 背景
我正在尝试编写一些中间件来使用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核心应用程序中安装了它 问题 当我尝试运行中间件时,我得到以下信息: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服务在内部共享。因此,我创建了一个类库并添加了中间件代
无法加载文件或程序集'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"
}
}
}
}