我是一个针对.NET 4.6的控制台应用程序,它依赖于NuGet包System.Net.Http v2.0.20126.16343。一切都工作得很好,直到我决定将我的Visual Studio安装从15.2(26430.14)升级到15.7.1(27703.2000)因为通知。
升级后,我的应用程序无法构建,即使程序包存在,我也会在System.Net.Http上找到缺少的引用。如果我再次删除并添加该包,Visual Studio将从GAC引用该库,而不是包文件夹。
如果我将System.Net.Http软件包升级到v4.3.3,我可以成功构建应用程序的唯一方法,但由于我无法控制的限制,我现在无法升级任何NuGet软件包。由于外部限制,我也无法卸载Visual Studio并再次返回到v15.2。
在使用VS 15.7.1时,有什么方法可以解决这个问题并保留在System.Net.Http的v2.0.20126上吗?
感谢您的帮助!
答案 0 :(得分:1)
添加app.config
并为assemblyBinding添加System.Net.Http:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="3750abcc3150b00c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.3.0" newVersion="2.0.20126.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
(我没试过这个,看看这是否适用于旧版本)
但是这个包仅适用于.net 4.0,对于.net 4.6来说没什么意义。这里最后的4.3.3有一个.net 4.6库,它增加了新功能。因此,将Nuget软件包更新到最新版本4.3.3将是更好的解决方案。
答案 1 :(得分:1)
强制应用程序使用NuGet版本的库而不是GAC
这是因为您的控制台应用程序定位<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="list-group-item" style="border-left: none; border-right: none;">
<img src="./img/desktop.png" height="25" width="25">
<a class="a-file">testcase.txt</a>
<button class="btn btn-default btn-sm btn-current" style="float: right;"><span class="glyphicon glyphicon-ok-circle span-current">btn-current</span></button>
<button class="btn btn-default btn-sm btn-star" style="float: right;"><span class="glyphicon glyphicon-star-empty span-star"></span></button>
</div>
。 nuget包用于.NET 4.6
(&lt; 4.5),其中.NET 4.0
不存在。当您的应用定位到System.Net.Http
时,它会转发到.NET Framework 4.5+
,这是平台的一部分。
这是在.NET Framework 4.5 +上运行的应用程序中设计的。
因此,要解决此问题,您可以将项目切换到.NET 4.0配置文件:
- 将我的项目切换到.NET 4.0配置文件。
- 卸载了Web API NuGet包。
- 再次安装Web API(Beta)NuGet包。
- 已验证.csproj文件包含所有引用的程序集,因此它始终从Bin文件夹而不是GAC中获取。
醇>
认证:Could not load file or assembly 'System.Net.Http, Version=2.0.0.0 in MVC4 Web API
如果您不希望将项目切换到.NET 4.0,您可以尝试magicandre1981的建议,将该软件包更新为4.1.0 + ,其中包括.net 4.6库。
此外,您可以参考this thread了解更多详情。
希望这有帮助。