前面【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项目

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

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

会提示如下错误:

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

转换成功后默认会带有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可以编译通过。

类库属性:

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

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

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

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

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

类库属性:

备注1:

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

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

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

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

追加:

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

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

两者区别

方法一:

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

方法二:

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

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

Xamarin+Prism开发之.net standard化的更多相关文章

  1. Xamarin移动开发之路

    Xamarin入门 1.Xamarin开发及学习资源 2.Xamarin安装及调试 Xamarin.Forms 1.入门 [快速入门] 2.XAML 3.应用程序基础知识 [辅助功能]eg:大类型.高 ...

  2. Android插件化开发之OpenAtlas生成插件信息列表

    上一篇文章.[Android插件化开发之Atlas初体验]( http://blog.csdn.net/sbsujjbcy/article/details/47446733),简单的介绍了使用Atla ...

  3. 【转载】浅谈游戏开发之2D手游工具

    浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android  程序设计: 其它  编程语言:   引擎/SDK ...

  4. ArcGIS Engine开发之旅04---ARCGIS接口详细说明

    原文:ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1.      IField接口(esriGeoDatabase)... 2 2.    ...

  5. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  6. iOS多线程开发之GCD(中篇)

    前文回顾: 上篇博客讲到GCD的实现是由队列和任务两部分组成,其中获取队列的方式有两种,第一种是通过GCD的API的dispatch_queue_create函数生成Dispatch Queue:第二 ...

  7. 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别

    高效开发之SASS篇   作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...

  8. .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇

    .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇 本文作为初级篇,适合已经安装好.NET Core 环境以及 Gtk 环境,并具备了 C#开发基础知识,能跑一些简单的例子,希望更 ...

  9. Python开发之IDE选择

    Python开发之IDE 一.为什么用IDE 到现在为止,谁还不是个写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择存放地点,执行时还要切换到命令行调用python解释器,好麻 ...

随机推荐

  1. Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用

    前言 啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~ 好啦~废话不多说,进入我们今天的主题.今天我们将和大家学习其他的数据 ...

  2. 每天一个Linux命令(07)--mv命令

    mv命令是move的缩写,可以用来移动文件或者将文件改名,这也是个常用命令,经常用来备份文件或者目录. 1.命令格式: mv  [选项] 源文件或目录  目标文件或目录 2.命令功能: 视mv命令中第 ...

  3. linux 之程序管理

    一个程序的父进程可以用PPID来判断   命令ps -l 可以用来观察程序相关的输出信息   被关闭的程序又产生:crontab或者父进程产生的   我们将常驻在系统中的程序称为:服务(daemon) ...

  4. FineUIMvc随笔(5)UIHelper是个什么梗?

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. UIHelper.Result 在 FineUIMvc 的每一个 HttpPost 的控制器方法里面,你都会看到 UIHelpe ...

  5. 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输

    一.前言 socket.io 实现了实时双向的基于事件的通讯机制,是基于 webSocket 的封装,但它不仅仅包括 webSocket,还对轮询(Polling)机制以及其它的实时通信方式封装成了通 ...

  6. Android学习总结(十二)———— BaseAdapter优化

    一.BaseAdapter的基本概念 对于Android程序员来说,BaseAdapter肯定不会陌生,灵活而优雅是BaseAdapter最大的特点.开发者可以通过构造BaseAdapter并搭载到L ...

  7. iOS热更新技术被苹果官方警告?涉及到RN、Weex、JSPatch!!!

    今天一早,不少iOS开发群都炸窝了,原因是部分iOS开发者收到了苹果的警告邮件: 有开发者质疑可能是项目中使用了JSPatch.weex以及ReactNative等热更新技术.对于修复bug提交审核的 ...

  8. 深入源码剖析String,StringBuilder,StringBuffer

    [String,StringBuffer,StringBulider] 深入源码剖析String,StringBuilder,StringBuffer [作者:高瑞林] [博客地址]http://ww ...

  9. Swap Nodes in Pairs leetcode

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  10. NSPredicate 查询/搜索

    IOS NSPredicate 查询.搜索   简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 最常用到的函数 + (NSP ...