我有一个.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应用程序中:
<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
发布于 2018-06-18 22:20:48
有两种方法可以解决这个问题:
1-更新ConsoleApp1的项目文件,使其包含在属性组中
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>2-在System.Collections.Immutable项目中直接添加对ConsoleApp1的引用。
这是一个已知的问题,使用Project引用和NuGet包引用不能自动正确地流引用。这是被跟踪的这里,但其中一个解决办法应该解除这个障碍。
发布于 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的这个问题。
https://stackoverflow.com/questions/50771569
复制相似问题