本文介绍了从Visual Studio 2017 15.5.1开始,如何不再使用Xamarin.Forms项目来定位具有PCL的最低Android KitKat(API 19)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道如何创建一个针对最低版本的Android Kitkat(API 19)的Xamarin.Forms项目,而无需使用Shared Project选项。
。不能使用Net Standard Library,因为
请注意,PCL现在已在以及
主要支持问题:
- 带有最新的V 2017年,使用Xamarin.Forms仍可以进行PCL吗?以及如何?
- 如果是,创建基于PCL的Xamarin.Forms项目的步骤是什么,是否有开放源码的模板可以对此进行引导?
- 如果否,是否表示我只能使用共享项目代码共享策略/模板通过Xamarin.Forms支持Android KitKat?
解决方案
基本配置文件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>完整< / DebugType>
< Optimize> false< / Optimize>
< OutputPath> bin\Debug< / OutputPath>
< DefineConstants> DEBUG;< / DefineConstants>
< ErrorReport>提示< / ErrorReport>
< WarningLevel> 4< / WarningLevel>
< / PropertyGroup>
< PropertyGroup Condition = = $(Configuration)| $(Platform)'==‘Release | AnyCPU'>
< Optimize> true< / Optimize>
< OutputPath> bin\Release< / OutputPath>
< ErrorReport>提示< / ErrorReport>
< WarningLevel> 4< / WarningLevel>
< / PropertyGroup>
< ItemGroup>
< Compile Include = MyClass.cs />
< Compile Include = Properties\AssemblyInfo.cs />
< / ItemGroup>
<导入项目= $(MSBuildExtensionsPath32)\Microsoft\Portable\ $(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets />
< / Project>
I want to know how to create a Xamarin.Forms Project that targets minimum version of Android Kitkat (API 19), without using the Shared Project option.
.Net Standard Library is not an option since the minimum supported Android version is Nougat. A large percentage of my target users (more than 40%) still uses phones with an Android version lower than Nougat.
In Visual Studio 15.5.1 or greater, no PCL option is provided under the Code Sharing Strategy Section in creating a new Xamarin.Forms project when using the Cross-Platform App template.
It was noted that PCL is now deprecated on Xamarin's Forum and also on the Visual Studio Developer Community
Key Supporting Questions:
- With the latest Vs 2017, is PCL even still possible with Xamarin.Forms? And How?
- If Yes, What are the steps to create a PCL-Based Xamarin.Forms Project and are there any open-soured templates to bootstrap this?
- If No, Does this mean I can only support Android KitKat with Xamarin.Forms using the Shared-Project Code Sharing strategy/template?
解决方案
Forms supports Android 4.0.3 (API 15) and higher, you are confusing the "Target Framework" (compileSdkVersion
) for the "Target Android Version" ( targetSdkVersion
) vs the "Minimum Android Version" (minSdkVersion
).
Your Xamarin.Form
project has to use the target framework of Nougat/7.0 (MonoAndroid7.0
) or above but can target the minimum of 4.0.3/IceCreamSandwich version.
- Note: The latest version of Forms required a target framework of 8.0
Xamarin has a great guide that explains how those things relate from Android to Xamarin.Android
Microsoft completely removed the template option to create PCL-based libraries
PCL projects still build fine
NetStandard is the only future, PCLs are dead, etc, etc...
IMHO this was breaking change as a lot of my clients are not ready to convert to NetStd and there are still NetStd bugs floating around (edge cases mostly)
Still need to create a PCL library, grab an existing project and copy, strip and rename it... or create the .csproj
yourself (see basic .csproj
).
A Basic Profile111 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>
这篇关于从Visual Studio 2017 15.5.1开始,如何不再使用Xamarin.Forms项目来定位具有PCL的最低Android KitKat(API 19)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!