前面【Visual Studio 2017創(chuàng)建.net standard類庫(kù)編譯出錯(cuò)原因】已經(jīng)解決.net standard類庫(kù)的編譯問題,現(xiàn)在可以正式進(jìn)入主題了。作為.net 跨平臺(tái)開發(fā)者也得跟上時(shí)代,響應(yīng)微軟變化。微軟正在開發(fā).net standard 2.0的版本,聽說將是最全的API庫(kù),那時(shí)目前使用的pcl類庫(kù)將會(huì)被替代??紤]到未來的變化,所以打算從現(xiàn)在開始新建xamarin項(xiàng)目的時(shí)候就去PCL化,全部.net standard 化。

由于2.0還沒有正式發(fā)布,xamarin也還沒有更新它的模板庫(kù)來支持.net standard ,所以很多都得手動(dòng)設(shè)置。

第一步:創(chuàng)建普通的Prism.Xamarin項(xiàng)目

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 

第二步:更改PCL類庫(kù)為標(biāo)準(zhǔn)類庫(kù)。

1,VS2015就有的老方法,通過項(xiàng)目屬性頁(yè)的鏈接按鈕更改。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

會(huì)提示如下錯(cuò)誤:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

這時(shí)候只能刪除全部Nuget包再進(jìn)行操作,操作結(jié)束后再添回Nuget包。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

轉(zhuǎn)換成功后默認(rèn)會(huì)帶有Microsoft.NETCore.Portable.Compatibility包,應(yīng)該刪除。

編輯project.json文件,添加如下設(shè)置,否則無法添加Xamarin等Nuget包:

1
2
3
4
5
6
7
{
  "supports": {},
  "dependencies": {
    "NETStandard.Library": "1.6.1"
  },
  "frameworks": {
    "netstandard1.4": {

"imports": "portable-net45+net45+wp8+win81+wpa8"

1
2
3
    }
  }
}

備注

Xamarin.Forms使用正式版2.3.3.193可以編譯通過。

類庫(kù)屬性:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 

2,直接創(chuàng)建新的.net standard類庫(kù),移植PCL內(nèi)容。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

備注:記得更改位置,不然文件夾不和ios.uwp,droid項(xiàng)目在同級(jí)目錄。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

在.csproj文件中添加如下設(shè)置:

 

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

<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>

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 

重新加載項(xiàng)目,把PCL類庫(kù)的文件全部托過來,編譯項(xiàng)目。

類庫(kù)屬性:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

備注1:

Xamarin.Forms如果使用正式版2.3.3.193,編譯會(huì)出XamlCTask錯(cuò)誤。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

Google的結(jié)果,這是一個(gè)Xamarin的Bug,beta-2.3.4-pre4版本已經(jīng)修正了。

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

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

升級(jí)到beta-2.3.4-pre6編譯成功。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 追加:

2017/4/5 Xamarin.Forms 2.3.4 正式版Release,用最新版應(yīng)該不會(huì)有以上問題。

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

 

備注2:

UWP項(xiàng)目的Microsoft.NETCore.UniversalWindowsPlatform為5.1.0版本時(shí)將會(huì)出現(xiàn)如下錯(cuò)誤:

System.Reflection.Emit.ILGeneration 4.3.0 為 UAP,Version=v10.0 上的 System.Reflection.Emit.ILGeneration 提供了編譯時(shí)引用程序集,但沒有與 win10-arm-aot 兼容的運(yùn)行時(shí)程序集。
一個(gè)或多個(gè)包與 UAP,Version=v10.0 (win10-arm-aot) 不兼容。
System.Reflection.Emit.ILGeneration 4.3.0 為 UAP,Version=v10.0 上的 System.Reflection.Emit.ILGeneration 提供了編譯時(shí)引用程序集,但沒有與 win10-x64-aot 兼容的運(yùn)行時(shí)程序集。
一個(gè)或多個(gè)包與 UAP,Version=v10.0 (win10-x64-aot) 不兼容。
System.Reflection.Emit.ILGeneration 4.3.0 為 UAP,Version=v10.0 上的 System.Reflection.Emit.ILGeneration 提供了編譯時(shí)引用程序集,但沒有與 win10-x86-aot 兼容的運(yùn)行時(shí)程序集。
一個(gè)或多個(gè)包與 UAP,Version=v10.0 (win10-x86-aot) 不兼容。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

升級(jí)到最新5.3.1編譯將沒問題。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 

兩者區(qū)別

方法一:

  • project.json進(jìn)行包管理

  • 屬性頁(yè)無復(fù)雜設(shè)置。

方法二:

  • .csproj文件進(jìn)行包管理。

  • 屬性頁(yè)可以進(jìn)行啟動(dòng)對(duì)象等很多設(shè)置。

介于有這些區(qū)別,更加應(yīng)該使用VS2017的.net standard模板創(chuàng)建類庫(kù),以應(yīng)對(duì)未來的變化。

每天成就一小步,積累下來就是一大步。 轉(zhuǎn)發(fā)本文請(qǐng)注明出處,謝謝您的閱讀與分享!