首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应该兼容的不兼容.NET标准程序集?

应该兼容的不兼容.NET标准程序集?
EN

Stack Overflow用户
提问于 2018-06-09 06:30:00
回答 2查看 16.1K关注 0票数 8

我有一个.NET标准2.0DLL项目。

除了NETStandard.Library 2.0.1之外,它没有其他引用,一切都很好。

WPF应用程序引用了它,一切似乎都很好。

System.Collections.Immutable 1.5.0的nuget包添加到DLL项目后,解决方案资源管理器的Dependencies根目录上会出现一个黄色感叹号。(嗯.我现在看到这个感叹号即使在我删除这个包之后仍然存在,但是我想这是一个VS错误,因为在添加这个库之前,一切看起来都很好。)

有了这两个包,一切都很好,但是当我尝试使用ImmutableDictionary时,我得到了以下内容:

System.IO.FileNotFoundException:“无法加载文件或程序集”System.Collections.Immutable、Version=1.2.3.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a“或其依赖项之一。系统找不到指定的文件。

看一下nuget包,我知道这两个包应该一起工作,因为(据我理解) 'System.Collections.Immutable`库说它支持.NET标准2.0。

我对.NET标准世界非常陌生。

在我的主应用程序的System.Collections.Immutable.dll文件夹中查看bin的公钥令牌时,我发现它确实是b03f5f7f11d50a3a。然而,版本是不同的。

通常,在旧的.NET中,我会尝试在应用程序的配置文件中添加一个程序集重定向。但在这里这样做似乎没有任何区别。将其添加到引用DLL的WPF应用程序中:

代码语言:javascript
复制
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

..。将异常更改为:

System.IO.FileNotFoundException:“无法加载文件或程序集”System.Collections.Immutable、Version=4.0.11.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a“或其依赖项之一。系统找不到指定的文件。 内部异常 FileNotFoundException:无法加载文件或程序集“System.Collections.Immutable、Version=1.2.3.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件。

这里发生什么事情?我不能把这两个nuget包裹放在一起吗?

更新:

现在我注意到我得到的DLL版本来自System.Collections.Concurrent.dll,而我对System.Collections.Immutable.dll感兴趣,它在我的bin文件夹中找不到.我甚至没有找到nuget包存储在我的解决方案中的位置。

更新2:

结果,当我创建一个具有类似设置的新解决方案(引用.NET标准2 DLL的完整框架控制台应用程序)时,我得到了完全相同的行为。

按照@Lasse V gs ther Karlsen的建议,我从这里下载了nuget包https://www.nuget.org/packages/System.Collections.Immutable,从中提取了正确的DLL,并将其放在我的bin文件夹中。然后控制台应用程序就起作用了。

我使用的是15.7.1版本的Visual。我不知道在最新的15.7.2版本中有什么变化。

您可以从这里下载我的可验证示例:https://mega.nz/#!YZMwGABD!eHHxvNdO59l2m5ZlHMG1vvqCd-GHv3EVckR-9htDojs

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-18 22:20:48

有两种方法可以解决这个问题:

1-更新ConsoleApp1的项目文件,使其包含在属性组中

代码语言:javascript
复制
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

2-在System.Collections.Immutable项目中直接添加对ConsoleApp1的引用。

这是一个已知的问题,使用Project引用和NuGet包引用不能自动正确地流引用。这是被跟踪的这里,但其中一个解决办法应该解除这个障碍。

票数 7
EN

Stack Overflow用户

发布于 2019-05-14 08:38:51

就我的情况而言,结果是同一解决方案中的项目有不同版本的System.Collections.Immutable.dll。(1.4.0和1.5.0)

一些MSBuild没有注意到dll有两个版本,并试图在某些项目中查找和加载dll版本1.5.0而不是1.4.0。

要解决这个问题,只需更新并确保每个proj。在同一个sln中具有相同版本的dll。

我也面临着System.Net.Http的这个问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50771569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档