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项目
第二步:更改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化的更多相关文章
- Xamarin移动开发之路
Xamarin入门 1.Xamarin开发及学习资源 2.Xamarin安装及调试 Xamarin.Forms 1.入门 [快速入门] 2.XAML 3.应用程序基础知识 [辅助功能]eg:大类型.高 ...
- Android插件化开发之OpenAtlas生成插件信息列表
上一篇文章.[Android插件化开发之Atlas初体验]( http://blog.csdn.net/sbsujjbcy/article/details/47446733),简单的介绍了使用Atla ...
- 【转载】浅谈游戏开发之2D手游工具
浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android 程序设计: 其它 编程语言: 引擎/SDK ...
- ArcGIS Engine开发之旅04---ARCGIS接口详细说明
原文:ArcGIS Engine开发之旅04---ARCGIS接口详细说明 ArcGIS接口详细说明... 1 1. IField接口(esriGeoDatabase)... 2 2. ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- iOS多线程开发之GCD(中篇)
前文回顾: 上篇博客讲到GCD的实现是由队列和任务两部分组成,其中获取队列的方式有两种,第一种是通过GCD的API的dispatch_queue_create函数生成Dispatch Queue:第二 ...
- 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别
高效开发之SASS篇 作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...
- .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇
.NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇 本文作为初级篇,适合已经安装好.NET Core 环境以及 Gtk 环境,并具备了 C#开发基础知识,能跑一些简单的例子,希望更 ...
- Python开发之IDE选择
Python开发之IDE 一.为什么用IDE 到现在为止,谁还不是个写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择存放地点,执行时还要切换到命令行调用python解释器,好麻 ...
随机推荐
- Omi实战-QQ附近用户列表Web页
原文地址https://github.com/AlloyTeam/omi/blob/master/docs/cn_pr_nearby.md 写在前面 Omi很适合大型复杂的Web页面开发,例如一些We ...
- phpcms v9更改后台文章排序的方法
后台文章排序怎么才可以按自己输入的数字排列?如按4,3,2,1,从大到小排列?实现方法如下: 修改文件: phpcms\modules\content 中的 content.php 代码如下: $da ...
- js五种设计模式说明与示例
第一种模式:js工厂模式 var lev=function(){ return "啊打"; }; function Parent(){ ...
- 【2017-02-21】分支语句if...else...、分支嵌套、变量的作用域
语句是指程序命令,都是按照顺序执行的. 语句又分为: 顺序语句:从上到下按顺序执行,挨个执行一遍. 分支语句:选择性执行语句,有的可能会执行,有的可能不执行.满足条件执行. 循环语句: 一.分支语句 ...
- HTML 5入门知识(三)
<canvas>标签 在网页中使用canvas元素,像使用其他HTML标签一样简单,然后利用JavaScript脚本调用绘图API,绘制各种图形.canvas拥有多种绘制路径.矩形.圆形. ...
- Yii地址美化(nginx环境)
通过urlmanager实现yii地址美化,需配合服务器中的rewrite配置 1.在'components'中加入 'urlManager'=>array( 'ur ...
- web计时机制——performance对象
前面的话 页面性能一直都是Web开发人员最关注的领域.但在实际应用中,度量页面性能的指标,是提高代码复杂程度和巧妙地使用javascript的Date对象.Web Timing API改变了这个局面, ...
- mac环境,搭建python+selenium遇到的问题
安装过程: 1.下载安装pip,下载并且解压文件(默认路径即可),打开终端,执行sudo python setup.py install,系统自带python,也可以不安装 2.执行 sudo eas ...
- Fraction to Recurring Decimal leetcode
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- Oracle-函数大全
ORACLE函数大全 1. 第一讲 单行函数和组函数详解 PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为 ...