nuget上System.Net.Http
的最新版本是4.3.4。但即使是最新的.Net Framework 4.8也附带了这个库的4.2.0。
即使我添加了nuget包,Visual Studio 2019仍然会从.Net Framework安装文件中获取System.Net.Http.dll
。
有什么办法可以绕过这个吗?
.Net Core仍然没有对wpf和winforms的设计器支持,这就是为什么我需要这个来与.net framework一起工作。
nuget上System.Net.Http
的最新版本是4.3.4。但即使是最新的.Net Framework 4.8也附带了这个库的4.2.0。
即使我添加了nuget包,Visual Studio 2019仍然会从.Net Framework安装文件中获取System.Net.Http.dll
。
有什么办法可以绕过这个吗?
.Net Core仍然没有对wpf和winforms的设计器支持,这就是为什么我需要这个来与.net framework一起工作。
5条答案
按热度按时间whitzsjs1#
完全同意你的观点,这是令人困惑的,但在最后,绑定重定向是你的朋友在这里使用你的app.config / web.config文件。
字符串
上面的代码段强制使用“newVersion”属性中指定的代码版本。
下表为您提供了有关版本控制差异的一些见解。
x1c 0d1x的数据
关于binding redirection的一些信息由微软自己提供。
dsekswqp2#
我有几个项目,我被迫安装.NETStandard 2.0,因为其他一些软件包依赖于它,即使我们只是使用.NET 4.6.1。(对不起,我不能指出我在哪里找到这个,因为它是很久以前做的),我能够弄清楚,当你有软件包使用netstandard2版本的程序集时,VS会自动强制
System.Net.Http
到4.2.0版本,即使你没有Dimi解释的绑定重定向。用netstandard2安装自己的包包括System.Buffers
,System.Collections.Immutable
,System.Memory
,System.Runtime.Compilers.Unsafe
和System.Text.Encodings.Web
(我相信还有更多)。我最终不得不手动编辑.csproj文件,并强制这些程序集使用netstandard1.x版本。
字符串
例如,
System.Memory
的提示路径指向netstandard2.0
文件夹。如果您转到的packages文件夹,您会发现此程序集有三种风格:netcoreapp211
、netstandard1.1
和netstandard2.0
。我不想要第一个,因为我没有使用.NET Core,在对所有指向netstandard2.0
的程序集执行了这个操作后,VS允许我使用我实际安装的System.Net.Http.4.3.4
包。我真的不知道为什么这样做,因为我对.NETStandard几乎一无所知,但它确实如此。
8yoxcaq73#
.NET的开发可能会非常痛苦,因为新版本的系统包发布了,而你碰巧使用了一个采用新版本的库。新版本包含库使用的一些额外的API,如果你使用旧版本,你的程序可能仍然运行,但在运行时与
MethodNotFoundException
崩溃,因为旧的DLL不包含定义的特定方法。即使你发布的是最新版本,你仍然可能会遇到问题。例如,一个库使用System. Net. Http 4.3.0.0,另一个库使用System.Net.Http 4.2.0.0,而你发布的应用程序是4.3.0.0,使用www.example.com的库将查找 * 确切 * 版本4.2.0.0,并使你的程序崩溃,因为你没有包含相同的版本。.NET团队预料到了这一点,并允许你的程序 * 重定向 * 4.2.0.0到4.3.0.0,这被称为绑定重定向。4.2.0.0
一旦你有很多绑定重定向,就不可能手工管理了。
最好的方法是让计算机自动为你做这件事。更新
.csproj
文件,使它包含一个AutoGenerateBindingRedirects
标记。字符串
接下来,更新
app.config
或web.config
并删除所有绑定重定向型
当您构建应用程序时,检查
bin\Debug\YOURAPP.exe.config
时,您会发现绑定重定向已自动添加,以便所有库查找DLL的单个版本。Web应用的附加步骤
如果您有
web.config
,则过程不同。由于需要将Web.config发送到生产计算机,因此需要添加正确的程序集绑定重定向。Visual Studio将计算所需的程序集绑定重定向,并显示生成警告。当您双击构建警告时,正确的程序集绑定重定向将添加到您的web.xml中。
附加检查
如果你使用
packages.config
,那么你应该检查你的.csproj
是否引用了packages.config
中定义的相同版本的nuget。但是,如果您正在构建.exe,而不是Web应用程序,我建议您将项目转换为使用PackageReference。Visual Studio将确保自动引用相同的版本,您不必检查。
kulphzqa4#
出于某种奇怪的原因,我的案例中的System.Net.Http dll将“Copy local”设置为true。在两个项目中,它是true,并且所有引用中只有该dll。Visual Studio或NuGet将其设置为这种方式看起来很可疑。当我将其设置为false时,我的运行时问题就消失了。我从app.config中删除了bindingRedirect,我无法使用它。
izkcnapc5#
不是这个问题的答案,但相关的和重要的:根据github上的官方帖子,你应该避免使用System.Net.Http的nuget包。如果他们可以选择回去,他们永远不会再单独发布那个.dll。