我有以下设置(简化示例):
MySolution
┠ MyPclLibrary (PCL targeting .NET Standard 1.3)
┃ ┗ Referencing Microsoft.EntityFrameworkCore.Sqlite (NuGet package)
┕ MyAndroidApp (Xamarin Android)
┗ Referencing MyPclLibrary
换句话说,MyAndroidApp
引用MyPclLibrary
,后者又引用作为NuGet包安装的Microsoft.EntityFrameworkCore.Sqlite
。我在Window 7 SP1计算机上使用Visual Studio 2015 Update 3。
现在的问题是,当我尝试构建解决方案时,我收到以下错误消息:
加载程序集时出现异常:System.IO.FileNotFoundException: 无法加载程序集' Microsoft.EntityFrameworkCore.Sqlite, Version = 1.1.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'。 也许它在Mono for Android配置文件中不存在?
我已经检查了MyAndroidApp\bin\Debug
目录,我可以看到Sqlite DLL没有被复制到输出目录。
当然,MyAndroidApp
不会直接拨打Microsoft.EntityFrameworkCore.Sqlite
。相反,MyPclLibrary
负责与Sqlite进行通信。
我最好猜测这个问题在某种程度上与基于project.json
的新依赖关系管理有关(MyPclLibrary
使用project.json
而MyAndroidApp
使用packages.config
)
Microsoft.EntityFrameworkCore.Sqlite
添加对MyAndroidApp
的引用 - 因此请将库作为第一类引用。然而,这完全违背了解决方案架构,因此是不可接受的。Project Properties (of MyAndroidApp) -> Android Options -> Linker -> Linking
设置为None
,因为Android链接器可能会忽略某些动态使用的程序集 - 再次无济于事。 如何在Xamarin Android项目中使用辅助参考?我可能错过了一些非常愚蠢的东西,所以我愿意接受任何建议。
答案 0 :(得分:2)
依赖管理有两种不同的方式,就像你的猜测一样。 MyPclLibrary项目使用MyPclLibrary。 deps.json从输入project.json合并compilationOptions,而MyAndroidApp项目使用packages.config直接将引用dll复制到bin文件夹。所以我们无法从MyPclLibrary复制Sqlite DLL。 deps.json到MyAndroidApp \ bin \ Debug目录。
此问题的解决方法是直接从MyAndroidApp添加对Microsoft.EntityFrameworkCore.Sqlite的引用(正如您已经尝试过的那样)。 Building Android Apps with Entity Framework的默认行为是将Sqlite NuGet包添加到Android项目中。