Prism开拓详解一

前面【Visual Studio 20一七创造.net
standard类库编写翻译出错原因
】已经化解.net
standard类库的编写翻译难题,今后得以标准进入正题了。作为.net
跨平台开采者也得跟上时期,响应微软转换。微软正在开荒.net standard
贰.0的版本,听闻将是最全的API库,那时方今使用的pcl类库将会被代替他。惦念到以往的改造,所以筹算从以后启幕新建xamarin项目标时候就去PCL化,全部.net
standard 化。

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

由于二.0还未有专门的学问揭露,xamarin也还未曾立异它的模版库来支持.net
standard ,所以广大都得手动设置。

  • style=”font-size: small; color: #0000ff”>不恐怕安装程序包“Microsoft.Identity.Client
    壹.0.3041422贰壹-阿尔法”。你正在尝试将此程序包安装到对象为“.NETPortable,Version=v4.5,Profile=Profile11一”的品种中,但该程序包不包罗其余与该框架包容的先后集引用或内容文件。有关详细消息,请联系程序包小编。*

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

不独是Microsoft.Identity.Client
有以上错误,盛名的条形码2维码类库ZXing.Net.Mobile等也只帮忙Profile七。那Profile是怎么?Profile111又是怎么了?前日逐1为您揭秘。

图片 1

PCL (Portable Class
Library)

图片 2

PCL是跨平台代码共享的1种设计方式,简称可移植类库。Xamarin.Adroid,Xamarin.iOS.UWP都能够直接参照调用。重如果将阳台非亲非故的事务代码成立为PCL类库,然而随着MVVM框架的盛行,Xamarin.Forms已经将View,ViewModel,Model都移植到了PCL类库,部分平台重视相比强就分平台实现。

 

Profile

其次步:更动PCL类库为正式类库。

PCL类库对应的平台集中不1致,对应的Profile版本也不等同。就算自定义的PCL类库与Nuge上PCL包的Profile差异等,将招致开题的失实不可能安装。

一,VS20一伍就有个别老艺术,通过品种属性页的链接按键改动。

图片 3

图片 4

譬如上海体育场合PCL类库的靶子集结对应的Profile如下(.csproj工程文件):

会提醒如下错误:

图片 5

图片 6

总体的Profile版本如下:

此刻不得不删除全体Nuget包再举行操作,操作甘休后再添回Nuget包。

图片 7

图片 8

.NET 四.5脚下对应的Profile为7,4玖,78,111,25玖.
能够查看当地目录【C:\Program Files (x86)\Reference
Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile】都有那多少个版本。

改产生功后默许会带有Microsoft.NETCore.Portable.Compatibility包,应该删除。

图片 9

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

切实的附和关系如下表:(Visual Studio 20一5 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 柒, 11一, 25九 。

    }
  }
}

Xamarin.Forms for UWP 开采的时候最棒是使用Profile 11一。

备注

【备注】

Xamarin.Forms使用正式版二.三.三.193得以编译通过。

Profile25玖没有System.Net.Http库,得设置微软的System.Net.Http包。目前流行的Http操作类库RestSharep也在征集PCL与UWP自愿者!

类库属性:

 

图片 10

愿意未来咱们蒙受无法安装包的时候能够自然的减轻了!

 

二,直接创建新的.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假如应用正规版二.三.3.1九三,编写翻译会出XamlCTask错误。

图片 14

谷歌的结果,那是多个Xamarin的Bug,beta-2.三.4-pre四本子现已校对了。

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

图片 15

晋级到beta-2.三.四-pre6编写翻译成功。

图片 16

 追加:

2017/百分之八十 Xamarin.Forms 二.3.4正式版Release,用新型版应该不会有上述难点。

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

 

备注2:

UWP项目标Microsoft.NETCore.UniversalWindowsPlatform为五.一.0版本时将会冒出如下错误:

System.Reflection.Emit.ILGeneration 四.叁.0 为 UAP,Version=v十.0 上的
System.Reflection.Emit.ILGeneration 提供了编写翻译时引用程序集,但从没与
win十-arm-aot 包容的运维时先后集。
贰个或七个包与 UAP,Version=v10.0 (win十-arm-aot) 不相称。
System.Reflection.Emit.ILGeneration 4.三.0 为 UAP,Version=v十.0 上的
System.Reflection.Emit.ILGeneration 提供了编写翻译时引用程序集,但尚无与
win10-x6四-aot 包容的运营时先后集。
一个或七个包与 UAP,Version=v10.0 (win⑩-x6四-aot) 不相称。
System.Reflection.Emit.ILGeneration 肆.三.0 为 UAP,Version=v十.0 上的
System.Reflection.Emit.ILGeneration 提供了编译时引用程序集,但并没有与
win10-x86-aot 包容的运作时先后集。
二个或八个包与 UAP,Version=v10.0 (win十-x八6-aot) 不包容。

图片 17

提高到最新伍.三.一编写翻译将没难题。

图片 18

 

双面分别

方法一:

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

方法二:

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

在于有这个分歧,越发应该运用VS20一七的.net
standard模板创建类库,以应对前途的转移。

相关文章