Class 库 (.NET Core) 与 Xamarin 中的 PCL

Class Library (.NET Core) vs PCL in Xamarin

我正在使用 .NET Standard 并发现奇怪的是,如果我为 .NET Core class 库 (xproj) 和便携式 Class 指定了以下 project.json库 (csharp),只有后者可以从 Xamarin.Android 项目中正确引用:

{
  "supports": {},
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1"
  },
  "frameworks": {
    "netstandard1.4": {}
  }
}

我可以将两者都添加为参考,dotnet update 按预期工作(或至少没有显示错误消息),但未实现 .NET 核心库:

type or namespace could not be found

我觉得这很奇怪,因为我希望任何 .NET 标准目标库都能正常工作。我是做错了什么还是故意只从 Xamarin 支持 PCL?

我假设您有一个 .csproj 用于 Xamarin.Android 项目和一个 .xproj 用于您的 .NET Core class 库,它以 .NET Standard 为目标。

相信这个问题可能是因为我们目前拥有不同的项目系统,并且每个系统都希望在其中找到构建的程序集以供项目参考。

解决方法是手动编辑 .csproj 以包含具有正确提示路径的引用。例如:

<Reference Include="SomeOtherClassLibrary">
    <HintPath>..\SomeOtherClassLibrary\bin$(Configuration)\netstandard1.6\SomeOtherClassLibrary.dll</HintPath>
</Reference>

您可能还需要手动将 Xamarin.Android 的构建依赖项添加到 class 库项目,以确保项目以正确的顺序构建(右键单击 Xamarin.Android解决方案资源管理器中的项目 Build Dependencies > Project Dependencies...).

总而言之,并不是说 .NET Standard 目标库不能与 Xamarin 一起工作,也不是说 Xamarin 只支持 PCL。这是项目参考和工具当前状态的一个怪癖,我相信它会及时改进。