• Xamarin+Prism开发之.net standard化


    前面【Visual Studio 2017创建.net standard类库编译出错原因】已经解决.net standard类库的编译问题,现在可以正式进入主题了。作为.net 跨平台开发者也得跟上时代,响应微软变化。微软正在开发.net standard 2.0的版本,听说将是最全的API库,那时目前使用的pcl类库将会被替代。考虑到未来的变化,所以打算从现在开始新建xamarin项目的时候就去PCL化,全部.net standard 化。

    由于2.0还没有正式发布,xamarin也还没有更新它的模板库来支持.net standard ,所以很多都得手动设置。

    第一步:创建普通的Prism.Xamarin项目

    image

    image

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

    1,VS2015就有的老方法,通过项目属性页的链接按钮更改。

    image

    会提示如下错误:

    image

    这时候只能删除全部Nuget包再进行操作,操作结束后再添回Nuget包。

    image

    转换成功后默认会带有Microsoft.NETCore.Portable.Compatibility包,应该删除。

    编辑project.json文件,添加如下设置,否则无法添加Xamarin等Nuget包:

    {
      "supports": {},
      "dependencies": {
        "NETStandard.Library": "1.6.1"
      },
      "frameworks": {
        "netstandard1.4": {
          

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

        }
      }
    }

    备注

    Xamarin.Forms使用正式版2.3.3.193可以编译通过。

    类库属性:

    image

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

    image

    备注:记得更改位置,不然文件夹不和ios.uwp,droid项目在同级目录。

    image

    在.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类库的文件全部托过来,编译项目。

    类库属性:

    image

    备注1:

    Xamarin.Forms如果使用正式版2.3.3.193,编译会出XamlCTask错误。

    image

    Google的结果,这是一个Xamarin的Bug,beta-2.3.4-pre4版本已经修正了。

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

    image

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

    image

     追加:

    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) 不兼容。

    image

    升级到最新5.3.1编译将没问题。

    image

    两者区别

    方法一:

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

    方法二:

    • .csproj文件进行包管理。
    • 属性页可以进行启动对象等很多设置。

    介于有这些区别,更加应该使用VS2017的.net standard模板创建类库,以应对未来的变化。

  • 相关阅读:
    【转载】PyQt QSetting保存设置
    Python WebDriver自动化测试
    Pyqt 控件的信号槽事件定义方法
    Pyqt SpVoice朗读功能
    Pyqt 国际化多语言支持
    MQTT研究之EMQ:【wireshark抓包分析】
    MQTT研究之EMQ:【SSL双向验证】
    ES6模板字符串【${}配合反单引号一起用】
    express中遇到的一个小问题“403”
    MQTT研究之EMQ:【基础研究】
  • 原文地址:https://www.cnblogs.com/lixiaobin/p/xamarinstandard.html
Copyright © 2020-2023  润新知