我有一个.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标准世界的新手。
查看我主应用程序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 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版本中修复了哪些更改...
您可以通过从此处下载来尝试我的可验证示例: https://mega.nz/#!YZMwGABD!eHHxvNdO59l2m5ZlHMG1vvqCd-GHv3EVckR-9htDojs
答案 0 :(得分:2)
有两种方法可以解决这个问题:
1 - 更新ConsoleApp1的项目文件,以将其包含在属性组
中<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
2 - 直接在ConsoleApp1中添加对System.Collections.Immutable
的引用
项目
这是一个已知问题,使用Project-to-Project引用和NuGet包引用不会自动正确地引用引用。正在跟踪here,但其中一个解决方法应该取消阻止。
答案 1 :(得分:1)
对于我来说,事实证明同一解决方案中的项目具有不同版本的System.Collections.Immutable.dll。 (1.4.0和1.5.0)
某种程度上,MSBuild不会注意到dll有2个版本,并试图在某些项目中查找并加载dll版本1.5.0而不是1.4.0。
要解决此问题,只需更新并确保每个项目。同一sln中的文件具有相同版本的dll。
我也遇到了Syste.Net.Http的问题。