在.NET标准PCL项目中,我想引用一个私有nuget包,其目标是配置文件111(lib \ portable-win8 + net45 + wpa81 + MonoAndroid + Xamarin.iOS10)
但是当我添加nuget包时,nuget抱怨nuget包不包含与netstandard 1.1兼容的目标。虽然文档https://docs.microsoft.com/fr-fr/dotnet/articles/standard/library解释了配置文件111与netstandard 1.1兼容,但如果引用了Microsoft.NETCore.Portable.Compatibility包,则可以引用它,这就是这种情况。
知道什么是错的吗?我可以更新自定义nuget包,但不知道要改变什么。
答案 0 :(得分:3)
在 project.json 文件中,尝试为特定PCL配置文件添加imports
指令。像这样,
"frameworks": {
"netstandard1.1": {
"imports": "portable-win8+net45+wpa81"
}
}
另外,为了获得最大的兼容性,我认为您应该删除NuGet包的MonoAndroid
和Xamarin.iOS10
规范。包管理器应该能够自己完成 Xamarin 的适用性。
可以找到有关imports
指令的更多信息here。
答案 1 :(得分:3)
同样的技巧适用于.csproj
个文件。您只需要将PackageTargetFallback
添加到项目文件中(在VS2017中测试):
<PropertyGroup>
<TargetFramework>netstandard1.1</TargetFramework>
<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wpa81</PackageTargetFallback>
</PropertyGroup>
答案 2 :(得分:1)
有时,在尝试使用软件包时,软件包没有支持相应的TargetFramework。对于这种情况,Imports提供了一种指定TargetFramework资产的方式 - 因为您知道它们是兼容的。
来自:https://docs.nuget.org/ndocs/schema/project.json
Imports Imports旨在允许使用dotnet TxM的软件包与未声明dotnet TxM的软件包一起运行。如果您的项目使用的是dotnet TxM,那么您所依赖的所有软件包也必须具有dotnet TxM,除非您将以下内容添加到project.json中,以便允许非dotnet平台与dotnet兼容。如果您使用的是dotnet TxM,那么PCL项目系统将根据支持的目标添加适当的import语句。
GET
MSBuild语法支持PackageTargetFallback
可能已在其中一个Microsoft目标(我们正在考虑)或其他目标中设置了PackageTargetFallbacks。
最后,正如@altso所说,您可以解决编辑PCL项目的.csproj的问题并添加下一行:
"frameworks": { "dotnet": { "imports" : "portable-net45+win81" } }
参考:https://github.com/NuGet/Home/wiki/PackageTargetFallback-%28new-design-for-Imports%29