从Visual Studio 2017 15.5.1开始,如何使用PCL创建一个Xamarin.Forms项目来定位最低Android KitKat(API 19)现在已经过时了?

Hue*_*Hue 6 xamarin.android xamarin xamarin.forms visual-studio-2017 .net-standard

我想知道如何创建一个针对Android Kitkat最低版本(API 19)的Xamarin.Forms项目,而不使用共享项目选项.

.Net标准库不是一个选项,因为最低支持的Android版本是Nougat.我的目标用户中有很大一部分(超过40%)仍然使用Android版本低于Nougat的手机.

在Visual Studio 15.5.1或更高版本中,在使用跨平台应用程序模板创建新的Xamarin.Forms项目时,代码共享策略部分下未提供PCL选项.

在此输入图像描述

有人指出,PCL现已在Xamarin论坛Visual Studio开发者社区上弃用

关键支持问题:

  1. 凭借最新的Vs 2017,PCL甚至还可以使用Xamarin.Forms吗?如何?
  2. 如果是,那么创建基于PCL的Xamarin.Forms项目的步骤是什么?是否有任何开放式模板来引导它?
  3. 如果否,这是否意味着我只能使用共享项目代码共享策略/模板支持带有Xamarin.Forms的Android KitKat?

Sus*_*ver 4

  • Forms 支持 Android 4.0.3 (API 15) 及更高版本,您可能会混淆“目标框架”( compileSdkVersion) 和“目标 Android 版本”( targetSdkVersion) 与“最低 Android 版本” ( minSdkVersion)。

    • 您的Xamarin.Form项目必须使用 Nougat/7.0 ( MonoAndroid7.0) 或更高版本的目标框架,但可以针对最低 4.0.3/IceCreamSandwich 版本。

      • 注意:最新版本的 Forms 需要 8.0 的目标框架
    • Xamarin 有一个很棒的指南,解释了这些东西如何与 Android 相关Xamarin.Android

  • 微软完全删除了创建基于 PCL 的库的模板选项

    • PCL项目仍然建设良好

    • NetStandard 是唯一的未来,PCL 已死,等等,等等......

    • 恕我直言,这是一个重大变化,因为我的很多客户还没有准备好转换为 NetStd,并且仍然存在 NetStd 错误(主要是边缘情况)

    • 仍然需要创建一个 PCL 库,获取一个现有项目并复制、剥离和重命名它......或者创建您.csproj自己的(请参阅基础.csproj)。

基本配置文件111 PCL .csproj

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{C38DBA87-39CB-4FD5-B409-6D19E6ED54C8}</ProjectGuid>
    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <UseMSBuildEngine>true</UseMSBuildEngine>
    <OutputType>Library</OutputType>
    <RootNamespace>PCLTemplate</RootNamespace>
    <AssemblyName>PCLTemplate</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <TargetFrameworkProfile>Profile111</TargetFrameworkProfile>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug</OutputPath>
    <DefineConstants>DEBUG;</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Optimize>true</Optimize>
    <OutputPath>bin\Release</OutputPath>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="MyClass.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
</Project>
Run Code Online (Sandbox Code Playgroud)

  • @Hue 将您的 **“目标框架”** 设置为 `8.0`,将您的 **“目标 Android 版本”** 设置为 `8.0`,将您的 **“最低 Android 版本”** 设置为 `4.0.3` 请参阅链接在我的答案中以获取详细信息 (2认同)