我正在尝试创建一个特定于iOS的类库程序集,它使用了优秀的Nito.AsyncEx 3.0.0 NuGet package。当我引入包时,编译器会标记与同一依赖程序集的不同版本的冲突:
1>C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3277: Found conflicts between different versions of the same dependent assembly that could not be resolved. These reference conflicts are listed in the build log when log verbosity is set to detailed.
1>c:\Users\mpilot\Documents\Visual Studio 2013\Projects\IosTestClassLib\packages\Microsoft.Bcl.1.1.8\lib\portable-net40+win8\System.IO.dll : error CS1703: An assembly with the same identity 'System.IO, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' has already been imported. Try removing one of the duplicate references.
1>c:\Users\mpilot\Documents\Visual Studio 2013\Projects\IosTestClassLib\packages\Microsoft.Bcl.1.1.8\lib\portable-net40+win8\System.Runtime.dll : error CS1703: An assembly with the same identity 'System.Runtime, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' has already been imported. Try removing one of the duplicate references.
1>c:\Users\mpilot\Documents\Visual Studio 2013\Projects\IosTestClassLib\packages\Microsoft.Bcl.1.1.8\lib\portable-net40+win8\System.Threading.Tasks.dll : error CS1703: An assembly with the same identity 'System.Threading.Tasks, Version=2.6.8.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' has already been imported. Try removing one of the duplicate references.
看起来Nito.AsyncEx包导入了Microsoft.Bcl包,这可能与Xamarin.iOS中的单声道实现冲突。
查看.nuspec文件,我看到与MonoTouch相关的目标框架都将Microsoft.Bcl列为依赖项。这同样适用于.Net Framework 4.0目标。对于以.Net 4.5为目标的项目,Microsoft.Bcl未列为依赖项(当然)。
AFAIK,Xamarin的最新iOS SDK确实实现了.Net 4.5中的所有async-await好东西。这意味着Nito.AsyncEx NuGet包应该将自己添加到以Xamarin.iOS为目标的类库中,就像类lib以.Net 4.5为目标一样。
事实上,如果我从程序集引用(和Microsoft.Bcl引用)中删除Nuget包,然后从Nuget的net45子文件夹手动添加Nito.AsyncEx DLL,那么工作正常 - 项目链接和Nito。 AsyncEx功能确实按预期工作 - 至少是我使用的部分。
我知道这是一个黑客,我不想在生产代码中这样做,但它告诉我,我对问题的初步分析并非完全偏离基础。
我错过了什么吗?是否有项目设置我需要调整才能将正确的包目标部署到我的类库中?或者NuGet包有什么问题吗?
答案 0 :(得分:0)
事实证明,问题已在Microsoft.Bcl 1.1.10中修复。只需从1.1.8更新到1.1.10就可以了!