如何在Android类库中控制NuGet包?

时间:2018-07-19 08:33:11

标签: c# xamarin.android visual-studio-2017 nuget

设置如下:

  • 一个Xamarin.Android应用程序,它取决于Android类库 (至少这就是在VS中称为模板的内容)
  • 说课 图书馆,其目的(不完全相关,但仅供参考)是 与REST服务接口,并依赖于著名的 Newtonsoft.Json NuGet软件包。
  • NUnit测试项目,用于表示 库。

IDE是Visual Studio 2017的最新版本。

如果您在手机上构建和部署该应用程序,则一切正常。 但是,如果您尝试从测试项目运行测试,则会显示找不到Newtonsoft库。

我什至设法找到了一种原因:构建库时,它的依赖关系没有打包在内部,也没有复制到构建目录中。 当为手机构建.apk时,依赖关系就被打包了。 但是,当NUnit项目自行构建时,它仅占用了库,并且在任何地方都找不到依赖关系。 但是,没有接口可以控制NuGet“包装参考”类型依赖项的行为(蓝色),属性窗口对它们而言是空的。而且我发现没有办法将NuGet软件包作为“ .config”类型的依赖项(灰色)添加到此类项目。

有一个解决方法-您可以将Newtonsoft软件包添加到NUnit测试项目中,然后将其复制到build目录中,并且Android库可以使用它,但是我觉得不合适。测试不需要该参考,并且该项目中没有业务。

2 个答案:

答案 0 :(得分:0)

  

如何控制Android类库中的NuGet包?

您的解决方法是正确的解决方案,您不必为此担心太多。

这是因为Newtonsoft包未在您的NUnit测试项目中直接使用,因此Visual Studio / MSBuild不知道您的测试项目是否需要此Newtonsoft库。为了避免NUnit测试项目中的引用污染,Visual Studio / MSBuild尝试仅将引用引入到它检测为项目Xamarin.Android应用程序所需的NUnit测试项目中。

因此,要解决此问题,我们通常将Newtonsoft添加到测试项目中,或给予复制任务以将其复制到测试项目中。

有关更多详细信息,请参见This Thread

答案 1 :(得分:0)

寻找另一个问题的答案,我现在发现信息,描述的行为是一个已知问题,由.NET开发人员在此处描述: https://github.com/dotnet/standard/issues/481