【问题标题】:Xamarin.iOS project: CS1703: Multiple assemblies with equivalent identity have been importedXamarin.iOS 项目:CS1703:已导入具有等效标识的多个程序集
【发布时间】: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'。删除重复引用之一。

我已经尝试了许多解决方法,如下所述:

oren.codes

www.hanselman.com

github.com/NuGet

很遗憾,这些建议都不起作用。我还尝试将 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 开放。

Xamarin Bugs

【问题讨论】:

  • 我猜在您的 iOS 项目的 .csproj 中,您有 2 个对 System.Reflection.Emit 包的引用,对吧?
  • 不,我应该清楚的。 System.Reflection.Emit 不直接由 Xamarin.iOS 项目或 Xamarin Forms 项目引用。该包作为其他 nuget 包的依赖项被引入。我已经用更多信息更新了上面的问题。

标签: xamarin.forms xamarin.ios .net-standard


【解决方案1】:

感谢@DirkWilhem 在 Xamarin 论坛网站上的回答,设法解决了这个问题。

基本上,将其与其他 PackageReference 节点一起添加到 Xamarin iOS 项目的 .csproj 文件中:

<PackageReference Include="System.Reflection.Emit">
  <Version>4.3.0</Version>
  <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

当然你需要先确保nuget包已经添加到iOS包中。

Xamarin Forums discussion

【讨论】:

  • 究竟如何将“this”添加到“我的 Xamarin iOS”中?
  • @mefiX 编辑 iOS 的 .csproj 文件并将其与其他 PackageReference 节点放在一起。
  • 说明:1)首先添加nuget包,添加最新版本-运行命令Install-Package System.Reflection -Version 4.7.0 2)手动编辑csproj添加上面的节点。你的cs proj应该看起来像这样&lt;PackageReference Include="System.Reflection.Emit"&gt; &lt;Version&gt;4.7.0&lt;/Version&gt; &lt;ExcludeAssets&gt;all&lt;/ExcludeAssets&gt; &lt;IncludeAssets&gt;none&lt;/IncludeAssets&gt; &lt;/PackageReference&gt; &lt;PackageReference Include="System.Reflection.Emit"&gt; &lt;Version&gt;4.3.0&lt;/Version&gt; &lt;ExcludeAssets&gt;all&lt;/ExcludeAssets&gt; &lt;/PackageReference&gt;
  • 我在使用 xUnit 设置单元测试时遇到了这个问题,其中包含一个 iOS 测试运行程序项目、一个包含测试的 iOS-Android 共享测试项目和一个包含模拟的 .NetStandard2.1 项目主要项目的核心和表单项目提供的对象和数据。上述解决方案绝对有效,但是您也可以通过 NuGet 或 manaullay 编辑 csproj 文件来引用不同版本的 System.Reflection.Emit(当前最新版本为 4.7.0)。
【解决方案2】:

花了几个小时试图自己解决这个问题后,我可能已经找到了解决方案。虽然感觉不对,但它让我解决了这个问题。

移动/删除 System.Reflection.Emit.dll 的 Xamarin.iOS 版本为我解决了构建问题,并使我能够在设备上部署和运行我的应用程序。我不知道它可能有什么副作用,所以需要更多的测试,但我想我会分享对我有用的东西,这样你也可以测试它。

我在 macOS Visual Studio 2017 上运行,但切换到 Windows 尝试修复并首先修复,然后在 macOS 上尝试相同的方法,效果也很好。

在 Windows 上,进入以下目录并将 System.Reflection.Emit.dll 移动到其他位置(您可以直接删除它,但我想保留一个副本,以防万一这有一些不良影响):

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\Xamarin.iOS\v1.0\Facades

在 mac 上以下目录有它:

/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.iOS/Facades

就像我说的,感觉不对,但现在它让我解决了一个让我被屏蔽了几天的问题,所以愿意继续前进,希望没有副作用。我很想知道你在这方面的经验,以及你未来是否还会遇到其他事情。

我将在 Xamarin 论坛帖子 (https://forums.xamarin.com/discussion/120814/xamarin-ios-project-cs1703-multiple-assemblies-with-equivalent-identity-have-been-imported) 上发布同样的评论,以供将来参考。

【讨论】:

    【解决方案3】:

    关于我们在单独项目中创建和使用的自定义 Nuget 包,我遇到了同样的问题。我们通过删除项目“选项”中的自动 Nuget 构建复选框来解决此问题。这确实增加了“创建 Nuget 包”的额外步骤,但是我们将它推送到我们的 Nuget 存储库并在我们的项目中使用它,错误就消失了。

    当我们将子项目从 PCL 更新到 .netstandards (2.0) 时,问题就出现了。

    【讨论】:

    • 我有同样的情况,但复选框已经取消选中,但我仍然收到同样的错误。你能帮我推荐点什么吗?
    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多