在一个包含 52 个项目(全部为 net462)的大型解决方案中,我们的一些依赖项的最新版本现在仅针对 NET 标准构建。因此,它们依赖于 NuGet 包 NETStandard.Library,后者又会拖入许多其他 4.3.x 版本的 System.* 包,这些包通常位于 .NET Framework 中本身。
因此,一些项目引用包文件夹中的 System.* 库,而其他项目引用 .NET Framework 中的 System.* 库。
这会导致众所周知的运行时问题,例如:
Message: System.IO.FileLoadException : Could not load file or assembly 'System.Net.Http, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
深入研究NETStandard.Library 包的依赖关系,我们可以看到这些包中也存在同样的问题:
通常这是通过在其他项目中安装相同的包来解决的,但是我们在这里处理很多项目和很多包,我不想盲目地将所有这些依赖项添加到所有 52 个项目中.
这让我想知道是否有人知道一种简单的方法来从这种情况中恢复并使所有项目从 NuGet 包文件夹引用正确的包/DLL(如果他们当前使用 NET Framework 内部包)。
可在 net462 和 net471 上找到演示该问题的简单 VS 解决方案 here
最佳答案
在默认项目模板中,System.Net.Http 作为引用添加到项目中,而不是作为 nuget 包。
在您的两个解决方案(4.6.1 和 4.7.1)中:
项目 ClassLibrary 依赖 System.Net.Http 作为 nuget 包。
项目 ConsoleApp1 依赖于 System.Net.Http 作为 .NET Framework 的简单引用
因此,该问题与 Target Framework 版本无关。
To fix the issue add the same version of
System.Net.Httpas a nuget package to all projects (where it is used).
在解决方案资源管理器中右键单击解决方案并选择Manage NuGet Packages for Solution...
切换到已安装标签
在列表中找到System.Net.Http,选择它。
检查当前状态:
安装 相同 版本的包(在您的情况下为 4.3.0)到 ConsoleApp1 项目。
查看结果:
完成。
此外,在您的解决方案中整合包版本也是一种很好的做法。相反,您可能会在构建期间遇到版本冲突。或者,更糟糕的是,由于绑定(bind)重定向到依赖项的另一个版本,会出现类似 MethodNotFound 的运行时错误。
System.Net.Http 问题的原因描述如下:
Broken System.Net.Http 4.1.1-4.3.0 post-mortem在 如何防止将来出现这种情况? 2.1
As a result we identified 2 problematic OOB packages, which are not leaf-nodes in the platform itself, and have dependency from the platform on them - System.Net.Http and System.IO.Compression.
这意味着相同的 System.Net.Http 库在 .NET Framework 中作为 OOB(带外)nuget 包提供。一些 nuget 包可以引用它的 nuget 版本。这就是我在一开始描述的问题。
因此,您不必修复对所有 System.* 库的引用。仅适用于这两个:System.Net.Http 和 System.IO.Compression。
关于c# - System.* 引入 NETStandard.Library 依赖项时的引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060230/
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha