参考PCL配置文件111是一个PCL .NET标准1.1。

3
在一个.NET标准PCL项目中,我想引用一个私有的NuGet包,该包针对profile 111(lib\portable-win8+net45+wpa81+MonoAndroid+Xamarin.iOS10)。
但是当我添加NuGet包时,NuGet会抱怨该NuGet包不包含与netstandard 1.1兼容的目标。虽然文档https://learn.microsoft.com/fr-fr/dotnet/articles/standard/library解释说profile 111与netstandard 1.1兼容,并且可以引用Microsoft.NETCore.Portable.Compatibility包进行引用,这也是情况。
有什么想法吗?我可以更新自定义NuGet包,但不知道要更改什么。
3个回答

3
project.json 文件中,尝试为特定的 PCL 配置文件添加 imports 指令。就像这样,
"frameworks": {
  "netstandard1.1": {
    "imports": "portable-win8+net45+wpa81"
  }
}

此外,为了最大限度地提高兼容性,我认为您应该删除NuGet包的MonoAndroidXamarin.iOS10规范。软件包管理器应该能够自行推断Xamarin适用性。
有关imports指令的更多信息,请点击这里

有运气了吗?我刚刚自己尝试了一下,对我来说似乎起作用了。 - Anders Gustafsson

3

同样的技巧也适用于.csproj文件。您只需要将PackageTargetFallback添加到您的项目文件中(在VS2017中测试通过):

<PropertyGroup>
  <TargetFramework>netstandard1.1</TargetFramework>
  <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wpa81</PackageTargetFallback>
</PropertyGroup>

1
有时候,在尝试使用一个包时,该包不支持所需的TargetFramework。Imports提供了一种方法,让您指定在这种情况下使用哪个TargetFramework的资产 - 因为您知道它们是兼容的。
引用:Imports旨在允许使用dotnet TxM的包与未声明dotnet TxM的包一起运行。 如果您的项目正在使用dotnet TxM,则您依赖的所有包都必须具有dotnet TxM,除非您将以下内容添加到project.json以允许非dotnet平台与dotnet兼容。 如果您正在使用dotnet TxM,则PCL项目系统将根据支持的目标添加适当的导入语句。
"frameworks": { "dotnet": { "imports" : "portable-net45+win81" } }

MSBuild语法支持PackageTargetFallback

PackageTargetFallbacks可能已在其中一个Microsoft目标(我们正在考虑的)或其他目标中设置。

最后,正如@altso所说,您可以编辑PCL项目的.csproj并添加下一行来解决问题:

<PackageTargetFallback Condition="'$(TargetFramework)'=='Net45'">
    $(PackageTargetFallback);portable-net45+win8+wpa81+wp8
</PackageTargetFallback >

参考资料: https://github.com/NuGet/Home/wiki/PackageTargetFallback-%28new-design-for-Imports%29

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接