C# 表单程序集引用

C# 表单程序集引用,c#,xamarin,C#,Xamarin,我正在为Android和iOS开发一个Xamarin.Forms应用程序。pcl项目增长了很多,安装了许多nuget软件包,如FluentValidation、SQlite和Newtonsoft.Json。特定于平台的项目只有几行代码,如自定义渲染器等。他们仅有的引用是SQlite 现在,在为Android编译时,这一切都很好。但是,在尝试为iOS构建时,我遇到一个错误->无法解析引用(System.EnterpriseServices.Wrapper.dll) 我的问题不是针对这个dll的,而

我正在为Android和iOS开发一个Xamarin.Forms应用程序。pcl项目增长了很多,安装了许多nuget软件包,如FluentValidation、SQlite和Newtonsoft.Json。特定于平台的项目只有几行代码,如自定义渲染器等。他们仅有的引用是SQlite

现在,在为Android编译时,这一切都很好。但是,在尝试为iOS构建时,我遇到一个错误->无法解析引用(
System.EnterpriseServices.Wrapper.dll

我的问题不是针对这个dll的,而且我想知道它是如何工作的。我假设,我可以在pcl项目中安装我想要的任何软件包。有限制吗?这些软件包必须与Xamarin.iOS/Xamarin.Android兼容吗?我如何跟踪dll的实际来源


为什么它在安卓系统中工作而在iOS系统中不工作?

是的,两种平台之间存在限制。您在PCL项目中使用的不同程序集和/或nuget软件包需要适合您的目标平台

原因很简单:当您构建iOS项目时,PCL项目也在为iOS目标构建,因此程序集需要兼容。这些程序集只是一个子集

iOS、Xamarin.Android和Xamarin.Mac都附带了超过 十几个集会。正如Silverlight是 在桌面.NET程序集中,Xamarin平台也是一个扩展子集 包含多个Silverlight和desktop.NET程序集

当您想要使用仅与android兼容的程序集时,请将其添加到android项目中,而不是PCL项目中

您可以在Xamarin开发者页面上找到具有的列表


在此列表中,您可以看到,
System.EnterpriseServices.dll
仅适用于android,不适用于iOS。另外,在SQLSite/<代码>系统中,发现一些限制。在iOS平台上,

>据我所知,代码>系统。企业服务。包装器。DLL<代码>是本地C++库,仅是基于Win32的,因此您不应该在Android或iOS应用程序中引用它,而不在PCL库中引用。我会查找错误的引用并将其删除(和/或查找您安装的want软件包正在将其作为软件包引用进行提取。@这就是问题所在。我不知道在我的解决方案中的任何地方都使用了该引用。我如何找到它?在OS-X/Linux上,您可以执行“find.-name”*.dll”-print0 | xargs-0-n 1-I%ikdasm-assemblyref”%“grep”Name=“”从程序包目录中列出所有引用的程序集。在Windows上,您可以使用
Ildasm.exe
(有关用法,请参阅:)AsmSpy,使用
--all
选项在Windows上也很有效:@SushiHangover我尝试过使用AsmSpy。现在我真的不知道如何处理输出。当然,我的bin文件夹中有dll。但我仍然不知道为什么。搜索所有其他
.dll
以查看哪一个正在引用它,以及找到的不是直接包ge reference,继续向后搜索,直到找到根程序集。