2017-02-02 75 views
2

我正在爲Android和iOS開發一個Xamarin.Forms應用程序。 pcl項目增長很多,並且安裝了許多nuget軟件包,如FluentValidation,SQlite和Newtonsoft.Json。平臺特定的項目只有像自定義渲染器和東西的幾行代碼。他們唯一的參考是SQlite。Xamarin.Forms程序集引用

現在編譯爲Android當這工作得很好。但是,當嘗試爲iOS構建時,出現錯誤 - >無法解析引用(System.EnterpriseServices.Wrapper.dll)。

我的問題是不特定於這個dll,而且我想知道它是如何真正起作用。我假設,我可以在pcl項目中安裝任何我想要的軟件包。是否有限制?包裝必須與Xamarin.iOS/Xamarin.Android兼容嗎?我如何能夠跟蹤,dll實際來自哪裏?

爲什麼它在Android中工作,但不在iOS中?

+0

據我所知,'System.EnterpriseServices.Wrapper.dll'是本地C++庫,並且只能基於Win32的,所以你不應該在你的任何Android或iOS應用來引用它,並在你的PCL沒有被引用圖書館。我會尋找不良的參考資料,並將其刪除(和/或找到您安裝的軟件包將其作爲軟件包參考。 – SushiHangover

+0

@SushiHangover這就是問題所在。我不知道在解決方案的任何位置使用參考。 – greenhoorn

+0

在OS-X/Linux上,您可以執行「find。-name」* .dll「-print0 | xargs -0 -n 1 -I%ikdasm -assemblyref」%「| grep」Name =「」從你的軟件包目錄中列出所有ref'd程序集。在Windows上,你可以使用'Ildasm.exe'(有關使用方法,請參考:https://msdn.microsoft.com/en-us/library/f7dy01k1(v = vs.110).aspx)AsmSpy,使用'--all'選項在Windows上也能很好地工作:https://github.com/mikehadlow/AsmSpy – SushiHangover

回答

1

是的,平臺之間存在限制。您在PCL項目中使用的不同程序集和/或nuget-packages,對於您所針對的平臺而言,需要相互兼容。

的原因很簡單:當你建立你的iOS項目,該項目PCL還建設了iOS的目標,因此,組件必須兼容。組件只是一個子集。

Xamarin.iOS,Xamarin.Android和Xamarin.Mac都附帶了超過 的組件。就像Silverlight是桌面.NET程序集的擴展子集一樣,Xamarin平臺也是幾個Silverlight和桌面.NET程序集的擴展子集 。

當您想要使用僅與android兼容的程序集時,請將其添加到android-project中,而不是在PCL項目中。

您可以找到supported assemblies over the platforms的Xamarin開發者頁面的列表。

在這個列表中可以看到,System.EnterpriseServices.dll僅適用於Android和不適用於iOS。另外你可以在iOS平臺上使用SQLite/System.Datathis page上發現一些限制。

+0

很好,謝謝:-) – greenhoorn

相關問題