我有一个使用.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包添加到Forms和/或iOS项目中。这也不起作用。请注意,最初,System.Reflection.Emit包未被解决方案中的任何内容直接引用。它由以下显式引用的nuget包引入:
最后,我在包控制台中尝试了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开放。
答案 0 :(得分:13)
由于@DirkWilhem在Xamarin论坛网站上的回答,管理得到解决。
基本上,将此添加到您的Xamarin iOS项目的created_at
文件中,以及其他PackageReference节点:
.csproj
当然,您需要确保首先将nuget包添加到iOS包中。
答案 1 :(得分:1)
花了好几个小时试图自己解决这个问题后,我可能找到了解决方案。虽然它确实感觉不对,但它已经让我解决了这个问题。
移动/删除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)上发布同样的评论以供将来参考。
答案 2 :(得分:0)
I had the same issue around a custom Nuget packages that we created and consumed in a separate project. We got around this issue by removing the automatic Nuget building checkbox in the "options" for the project. This does add the extra step of "Create Nuget Package" but one we pushed it to our Nuget repo and consumed it in our project, the errors vanished.
The problem showed up when we updated the sub-projects from PCLs to .netstandards (2.0).