PCL跨平台类库与Profile的涉嫌

前面【Visual Studio 2017创设.net
standard类库编写翻译出错原因
】已经化解.net
standard类库的编写翻译难点,未来能够正式步向正题了。作为.net
跨平台开垦者也得跟上有时,响应微软变动。微软正在开辟.net standard
2.0的版本,据书上说将是最全的API库,那时近期应用的pcl类库将会被代表。思念到以往的成形,所以筹划从今日先河新建xamarin项目标时候就去PCL化,全体.net
standard 化。

在【Xamarin+Prism小规模试制牛刀:定制跨平台Outlook邮箱应用】中涉及过以下错误,不知情大家还记得不:

由于2.0还未曾正儿八经发表,xamarin也还未曾创新它的模板库来协助.net
standard ,所以广大都得手动设置。

  • style=”font-size: small; color: #0000ff”>不能安装程序包“Microsoft.Identity.Client
    1.0.304142221-阿尔法”。你正在品尝将此程序包安装到对象为“.NETPortable,Version=v4.5,Profile=Profile111”的品种中,但该程序包不包括别的与该框架包容的主次集引用或内容文件。有关详细消息,请联系程序包作者。*

率先步:创立普通的Prism.Xamarin项目

不独是Microsoft.Identity.Client
有以上错误,知名的条形码二维码类库ZXing.Net.Mobile等也只协助Profile7。那Profile是怎么?Profile111又是怎么着了?今日逐个为您爆料。

图片 1

PCL (Portable Class
Library)

图片 2

PCL是跨平台代码分享的一种设计方式,简称可移植类库。Xamarin.Adroid,Xamarin.iOS.UWP都能够直接参照调用。首假设将平台无关的业务代码成立为PCL类库,可是随着MVVM框架的盛行,Xamarin.Forms已经将View,ViewModel,Model都移植到了PCL类库,部分平台依赖相比较强就分平台达成。

 

Profile

第二步:改造PCL类库为标准类库。

PCL类库对应的阳台集聚不等同,对应的Profile版本也不一样等。若是自定义的PCL类库与Nuge上PCL包的Profile不平等,将促成开题的失实不能安装。

1,VS2016就有的老方法,通过品种属性页的链接按键更动。

图片 3

图片 4

诸如上海体育场地PCL类库的目的集合对应的Profile如下(.csproj工程文件):

会唤醒如下错误:

图片 5

图片 6

成套的Profile版本如下:

那会儿不得不删除全数Nuget包再开展操作,操作停止后再添回Nuget包。

图片 7

图片 8

.NET 4.5脚下对应的Profile为7,49,78,111,259.
足以查阅当地目录【C:\Program Files (x86)\Reference
Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile】都有那多少个版本。

转移成功后暗中同意会带有Microsoft.NETCore.Portable.Compatibility包,应该删除。

图片 9

编写制定project.json文件,加多如下设置,不然无法增多Xamarin等Nuget包:

现实的对应关系如下表:(Visual Studio 2015 Update3/Windows10条件)

{
  "supports": {},
  "dependencies": {
    "NETStandard.Library": "1.6.1"
  },
  "frameworks": {
    "netstandard1.4": {
Profile VS目标设置 对应平台
Profile7
  • .NET 4.5
  • Windows 8 (含UWP)
  • Windows Store apps (Windows 8)
  • Xamarin.Android
  • Xamarin.iOS Classic
  • Xamarin.iOS Unified
  • Asp.NET core1.0
Profile49
  • NET 4.5
  • Windows Phone 8 or later
  • Windows Phone Sliverlight 8
  • Xamarin.Android
  • Xamarin.iOS Classic
  • Xamarin.iOS Unified
  • Asp.NET core1.0
Profile78
  • .NET 4.5
  • Windows Phone 8 or later
  • Windows 8(含UWP)
  • Windows Phone Sliverlight 8
  • Windows Store apps (Windows 8)
  • Xamarin.Android
  • Xamarin.iOS Classic
  • Xamarin.iOS Unified
  • Asp.NET core1.0
Profile111
  • NET 4.5
  • Windows Phone 8.1 or later
  • Windows 8(含UWP)
  • Xamarin.Android
  • Xamarin.iOS Classic
  • Xamarin.iOS Unified
  • Asp.NET core1.0
Profile259
  • .NET 4.5
  • Windows Phone 8.1 or later
  • Windows 8(含UWP)
  • Windows Phone Sliverlight 8
  • Windows Store apps (Windows 8)
  • Xamarin.Android
  • Xamarin.iOS Classic
  • Xamarin.iOS Unified
  • Asp.NET core1.0

没有System.Net.Http

“imports”:
“portable-net45+net45+wp8+win81+wpa8”

Xamarin.Forms for Windows 开拓的时候最棒是应用Profile 7, 111, 259 。

    }
  }
}

Xamarin.Forms for UWP 开辟的时候最棒是行使Profile 111。

备注

【备注】

Xamarin.Forms使用正式版2.3.3.193方可编写翻译通过。

Profile259未有System.Net.Http库,得设置微软的System.Net.Http包。近期风靡的Http操作类库RestSharep也在招生PCL与UWP自愿者!

类库属性:

 

图片 10

指望今后大家蒙受不能安装包的时候能够自然的解决了!

 

2,直接开立新的.net
standard类库,移植PCL内容。

图片 11

备考:记得更动地点,不然文件夹不和ios.uwp,droid项目在同级目录。

图片 12

在.csproj文件中加多如下设置:

 

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.4</TargetFramework>
    <PackageTargetFallback>$(PackageTargetFallback);portable-win+net45+wp8+win81+wpa8</PackageTargetFallback>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Prism.Unity.Forms" Version="6.3.0" />
    <PackageReference Include="Xamarin.Forms" Version="2.3.4.221-pre6" />
  </ItemGroup>

</Project>

 

再一次加载项目,把PCL类库的公文全体托过来,编写翻译项目。

类库属性:

图片 13

备注1:

Xamarin.Forms假如使用正规版2.3.3.193,编写翻译会出XamlCTask错误。

图片 14

Google的结果,那是多少个Xamarin的Bug,beta-2.3.4-pre4版本已经改良了。

https://bugzilla.xamarin.com/show_bug.cgi?id=53060

图片 15

晋级到beta-2.3.4-pre6编译成功。

图片 16

 追加:

2017/4/5 Xamarin.Forms 2.3.4
正式版Release,用风尚版应该不会有以上难点。

https://blog.xamarin.com/announcing-xamarin-forms-stable-release-2-3-4/

 

备注2:

UWP项目的Microsoft.NETCore.UniversalWindowsPlatform为5.1.0本丑时将会现出如下错误:

System.Reflection.Emit.ILGeneration 4.3.0 为 UAP,Version=v10.0 上的
System.Reflection.Emit.ILGeneration 提供了编写翻译时引用程序集,但尚无与
win10-arm-aot 包容的周转时前后相继集。
叁个或四个包与 UAP,Version=v10.0 (win10-arm-aot) 不包容。
System.Reflection.Emit.ILGeneration 4.3.0 为 UAP,Version=v10.0 上的
System.Reflection.Emit.ILGeneration 提供了编写翻译时援用程序集,但并未与
win10-x64-aot 兼容的运营时前后相继集。
一个或三个包与 UAP,Version=v10.0 (win10-x64-aot) 不相配。
System.Reflection.Emit.ILGeneration 4.3.0 为 UAP,Version=v10.0 上的
System.Reflection.Emit.ILGeneration 提供了编写翻译时援引程序集,但尚未与
win10-x86-aot 包容的运作时前后相继集。
二个或多个包与 UAP,Version=v10.0 (win10-x86-aot) 不包容。

图片 17

提高到最新5.3.1编写翻译将没难题。

图片 18

 

双面分别

方法一:

  • project.json进行包管理
  • 属性页无复杂设置。

方法二:

  • .csproj文件实行李包裹管理。
  • 属性页能够扩充运营对象等众多装置。

在于有那些差别,尤其应该采纳VS2017的.net
standard模板成立类库,以应对前途的变通。

相关文章