Xamarin平台项目无法解决NuGet依赖项

时间:2020-08-21 17:04:38

标签: visual-studio xamarin nuget-package nuget-spec

我正在努力理解为什么有时由于Xamarin平台应用程序无法从其共享的(.NET Standard)项目中解决NuGet间接依赖关系而陷入这种情况的原因。

这种情况:

我扩展了已经构建和部署的跨平台(iOS,Android和UWP)NuGet程序包。新功能要求共享(.NET Standard)代码库项目对System.IdentityModel.Tokens.Jwt有新的依赖性。 System.IdentityModel.Tokens.Jwt依次具有Microsoft.IdentityModel.TokensMicrosoft.IdentityModel.JsonWebTokens的依赖关系。

我建立了代码库; .NET Standard 2.0(共享)代码库和iOS,Androind和UWP的三个平台库。一切都很好,所以我更新了.nuspec并将System.IdentityModel.Tokens.Jwt添加到<group targetFramework=".NETStandard2.0">的{​​{1}}子节中,然后打包.nuget。

接下来,为确保一切正常,我将.nuget“部署”到本地文件夹(已将其设置为用于测试目的的nuget源),然后为我的四个测试应用程序项目(.Net标准,iOS,Android和UWP)。共享的.Net Std lib项目构建良好,因此我尝试构建平台之一,例如Android应用程序。我现在收到此错误:

<dependencies>

我检查了Android应用程序项目的Can not resolve reference: `Microsoft.IdentityModel.Tokens`, referenced by `(my package)` 文件,这是nuget输出:

project.assets.json

问题是,(我的包裹)对 "(my package name)": { "type": "package", "dependencies": { "Xamarin.Forms": "4.0.0" }, "compile": { "lib/MonoAndroid10/(my package name).Android.dll": {}, "lib/MonoAndroid10/(my package name).dll": {} }, "runtime": { "lib/MonoAndroid10/(my package name).Android.dll": {}, "lib/MonoAndroid10/(my package name).dll": {} } }, 以外的其他包裹也有依赖性,例如System.IdentityModel.Tokens.JwtXamarin.Essentials。反过来,它们又依赖于其他NuGets,依此类推。由于某种原因,这似乎根本不是问题。根据我的读物(https://docs.microsoft.com/en-us/nuget/concepts/dependency-resolution),Visual Studio会找出所有依赖关系,并构建一个依赖关系图,然后将其展平并写入每个项目的System.Text.Json。为什么某些(大多数,显然是)软件包可以完全解决而另一些却不能?

我通过简单地将所有麻烦的引用直接添加到.nuspec文件的每个平台目标部分来“解决”了问题,但我不知道为什么甚至有必要这样做。

有人吗?

0 个答案:

没有答案