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

我有一个.NET Standard 2.0 DLL项目。

项目目标框架

除了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标准世界的新手。

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

嗯...

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

          

…将exception更改为:

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:

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

按照@LasseVågsætherKarlsen的建议,我从https://www.nuget.org/packages/System.Collections.Immutable下载了nuget包,从中提取了正确的DLL,并将其放在我的bin文件夹中。 然后控制台应用程序工作。

我使用的是Visual Studio的15.7.1版本。 我不确定在最新的15.7.2版本中修复了哪些更改…

你可以从这里下载它来尝试我可validation的例子: https : //mega.nz/#! YZMwGABD!eHHxvNdO59l2m5ZlHMG1vvqCd-GHv3​​EVckR- 9htDojs

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

1 – 更新ConsoleApp1的项目文件,以将其包含在属性组中

 PackageReference 

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

这是一个已知问题,使用Project-to-Project引用和NuGet包引用不会自动正确地引用引用。 这是在这里跟踪的,但其中一个解决方法应该解除阻止。