应该兼容的不兼容的.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-GHv3EVckR- 9htDojs
有两种方法可以解决这个问题:
1 – 更新ConsoleApp1的项目文件,以将其包含在属性组中
PackageReference
2 – 直接在ConsoleApp1项目中添加对System.Collections.Immutable
的引用。
这是一个已知问题,使用Project-to-Project引用和NuGet包引用不会自动正确地引用引用。 这是在这里跟踪的,但其中一个解决方法应该解除阻止。