【发布时间】:2018-12-12 01:36:52
【问题描述】:
我有一个使用 .NET Standard 2.0 的跨平台(iOS 和 Android)Xamarin 解决方案。该解决方案正在由 Visual Studio 2017 构建(我已经尝试了当前版本和预览版本)。 Forms 和 Android 项目构建良好。但是,iOS 构建失败,出现以下错误:
1>CSC:错误 CS1703:已导入具有等效标识的多个程序集:'C:\Users\newuser.nuget\packages\system.reflection.emit\4.3.0\ref\netstandard1.1\System.Reflection .Emit.dll' 和 'C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\Xamarin.iOS\v1.0\Facades\System.Reflection.Emit。 dll'。删除重复引用之一。
我已经尝试了许多解决方法,如下所述:
很遗憾,这些建议都不起作用。我还尝试将 System.Reflection.Emit nuget 包直接添加到表单和/或 iOS 项目中。这也不起作用。请注意,最初,解决方案中的任何内容都没有直接引用 System.Reflection.Emit 包。它被以下明确引用的 nuget 包引入:
- Acr.DeviceInfo (5.0.5)
- akavache (6.0.0-alpha0038)
- AutoMapper (6.2.2)
- Microsoft.Identity.Client (1.1.1-preview0040)
- Newtonsoft.Json (10.0.3)
最后,我尝试了包控制台中的 update-package -reinstall 命令来重新安装 iOS 项目的所有包。这也不起作用。
--更新
为了清楚起见,Xamarin Forms 或 Xamarin iOS 项目都没有直接引用 System.Reflection.Emit。该包作为其他 nuget 包的依赖项被拉入,仅来自安装到 Xamarin Forms 项目中的包。我已经确认 Nuget 引用的所有依赖项都使用相同的版本。查看这些屏幕截图:
在我看来,问题(如错误所示)是 Visual Studio 安装了旧版本的 System.Reflection.Emit。但是,我找不到忽略它并改用 System.Reflection.Emit 版本的方法。正如我上面所说,我曾尝试在 Xamarin.iOS 项目中使用 project.json 文件,并手动忽略,但这不起作用。
还有其他人有什么想法吗?
顺便说一句,我注意到这个错误仍然对 Xamarin 开放。
【问题讨论】:
-
我猜在您的 iOS 项目的 .csproj 中,您有 2 个对 System.Reflection.Emit 包的引用,对吧?
-
不,我应该清楚的。 System.Reflection.Emit 不直接由 Xamarin.iOS 项目或 Xamarin Forms 项目引用。该包作为其他 nuget 包的依赖项被引入。我已经用更多信息更新了上面的问题。
标签: xamarin.forms xamarin.ios .net-standard