将Win8.1/WP8.1应用迁移到Universal Windows Platform
在上一篇在VS2015 RC打开CTP中创建的工程,我们介绍了怎么在RC中打开CTP中创建的Universal 工程,这一篇我们来讲下怎么将Windows 8.1/WP8.1的应用迁移到Universal Windows Platform上。
2015RC中,我们可以将8.1的应用迁移到统一平台上,进而使用新的API进行开发,下面我们使用wp8.1的应用作为例子讲解下步骤。
1. 首先我们使用2015打开之前的工程。

2. 右键点击工程,选择“卸载项目”。

3. 右键点击工程,选择“编辑XXX.csproj”

4. 和上一篇一样,取得平台版本号,路径是“\Program Files (x86)\Windows Kits\10\Platforms\UAP”

下面就开始修改工程文件了
5. 找到个包含子节点TargetPlatformVersion、且值为8.1的PropertyGroup节点(其实一般第一个PropertyGroup就是了),进行下面的修改:
- 把Platform的值改成x86
- 添加TargetPlatformIdentifier节点,值为UAP
- 把TargetPlatformVersion的值改成4中取得的版本号
- 添加TargetPlatformMinVersion节点,值为4中的版本号
- 把MinimumVisualStudioVersion的值改成14
- 把ProjectTypeGuids的值改成{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 添加EnableDotNetNativeCompatibleProfile节点,值为true

6. 把所有的vs版本从12.0替换成14.0,这一步直接替换即可(CTRL+H)

7. 删掉配置为AnyCPU的PropertyGroup节点
8. 查看剩下配置是Release的PropertyGroup节点,如果下面没有UseDotNetNativeToolchain子节点的话,就动手加一个,值一定要是true, 即:<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
9. 如果是手机项目的话,还需要删除下面这个节点

10. 现在重新加载我们的工程,会发现工程类型变成了Windows Universal了!下面还是需要修改manifest。

11. 打开manifest文件,首先我们需要替换掉所有的schema,把Package节点用下面这段替换。
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
IgnorableNamespaces= "uap mp">
对于Win8.1应用,还需要额外添加mp:PhoneIdentity的节点,如下,其中PhoneProductId就是Identity的Name, PhonePushedId目前是固定的值
<Identity Name="fe8a6971-8349-489b-8941-83dd308e9b9b"
Publisher="CN=xxxxxxx"
Version="1.0.0.0" /> <mp:PhoneIdentity PhoneProductId="fe8a6971-8349-489b-8941-83dd308e9b9b" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
12. 在Package下添加如下子节点,其中的版本号就是我们之前一直用的
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10069.0" MaxVersionTested="10.0.10069.0" />
</Dependencies>
13. 删除Prerequisites节点
14. 检查你的Resources节点,如果是用到了Scale和DXFeatureLevel的话,为他们加上uap命名空间,如下
<Resources>
<Resource Language="x-generate"/>
<Resource uap:Scale="180"/>
<Resource uap:DXFeatureLevel="dx11"/>
</Resources>
15. 检查你的Capability节点,如果使用声明了下列这些权限,需要加上uap命名空间。
- documentsLibrary
- picturesLibrary
- videosLibrary
- musicLibrary
- enterpriseAuthentication
- sharedUserCertificates
- removableStorage
- appointments
- contacts
如:
<Capabilities>
<uap:Capability Name="documentsLibrary"/>
<uap:Capability Name="removableStorage"/>
</Capabilities>
16. 将VirsualElements节点及其子节点的命名空间改成uap
<uap:VisualElements
DisplayName="App9"
Square150x150Logo="Assets\Logo.png"
Square44x44Logo="Assets\SmallLogo.png"
Description="App9"
BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\WideLogo.png" Square71x71Logo="Assets\Square71x71Logo.png"/>
<uap:SplashScreen Image="Assets\SplashScreen.png"/>
</uap:VisualElements>
对于Win8.1应用,这里需要注意的是,属性Square{SIZE}Logo中的size有了变化,70x70变成了71x71, 30x30变成44x44.
旧的:
<m2:VisualElements
…
Square30x30Logo="Assets\SmallLogo.png"
…>
<m2:DefaultTile
…
Square70x70Logo="images/70x70.png">
</m2:VisualElements>
新的:
<uap:VisualElements
…
Square44x44Logo="Assets\SmallLogo.png"
…>
<uap:DefaultTile
…
Square71x71Logo="images/70x70.png">
</uap:VisualElements>
17. 检查Extensions节点,为下列节点添加命名空间uap
- windows.accountPictureProvide
- windows.alarm
- windows.appointmentsProvider
- windows.autoPlayContent
- windows.autoPlayDevice
- windows.cachedFileUpdate
- windows.cameraSettings
- windows.fileOpenPicker
- windows.fileTypeAssociation
- windows.fileSavePicke
- windows.lockScreenCall
- windows.printTaskSettings
- windows.protocol
- windows.search
- windows.shareTarget
如:
<Extensions>
<uap:Extension Category="windows.alarm"/>
<uap:Extension Category="windows.search" EntryPoint="MyActivateableClassId.baz"/>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="mailto" DesiredView="useHalf">
<uap:DisplayName>MailTo Protocol</uap:DisplayName>
</uap:Protocol>
</uap:Extension>
</Extensions>
18. 为类型为chatMessageNotification的后台任务加上uap命名空间
如:
<Extension Category="windows.backgroundTasks" EntryPoint="Fabrikam.BackgroundTask" Executable="MyBackground.exe">
<BackgroundTasks ServerName="MyBackgroundTasks">
<uap:Task Type="chatMessageNotification"/>
</BackgroundTasks>
</Extension>
19. 修改PackageDependency,添加Publisher和MinVersion属性
<Dependencies>
<PackageDependency
Name="Microsoft.VCLibs.120.00"
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
MinVersion="12.0.30113.0" />
</Dependencies>
20. 将类型为gattCharacteristicNotification 和rfcommConnection的后台任务替换为Bluetooth类型。
<Extension Category="windows.backgroundTasks" EntryPoint="Fabrikam.BackgroundTask" Executable="MyBackground.exe">
<BackgroundTasks ServerName="MyBackgroundTasks">
<Task Type="bluetooth"/>
</BackgroundTasks>
</Extension>
21. 使用新的bluetooth capability替换bluetooth.rfcomm和bluetooth.genericAttributeProfile
旧的:
<Capabilities>
<m2:DeviceCapability Name="bluetooth.rfcomm">
<m2:Device Id="any">
<m2:Function Type="serviceId:34B1CF4D-1069-4AD6-89B6-E161D79BE4D8"/>
</m2:Device>
</m2:DeviceCapability>
<m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
<m2:Device Id="any">
<m2:Function Type="name:heartRate"/>
</m2:Device>
</m2:DeviceCapability>
</Capabilities>
新的:
<Capabilities>
<uap:DeviceCapability Name="bluetooth"/>
</Capabilities>
22. 删除Windows.contact和windows.contactPicker扩展
23. 删除VisualElements的ForgroundText和ToastCapable属性
24. 删除DefaultTitle的DefaultSize属性
25. 删除ApplicationView节点
26. 到此manifest文件就修改完了,保存吧!虽然看上去步骤有点多,其实17之后的很多步骤可能是用不到的
27. 下面我们需要删除一些额外的文件
- 检查解决方案目录下的子目录"\.vs\{project name}\v14",如果存在".suo"文件,删掉它

- 删除掉工程目录下所有的后缀为.csproj.user文件

现在我们的工程就已经成功的迁移到了Universal Windows Platform了,但是对于很多应用来说,还是需要进一步修改code,因为Windows 10的很多API都有了变化。
将Win8.1/WP8.1应用迁移到Universal Windows Platform的更多相关文章
- Windows.Andy.Code4App.dll Win8.1/WP8.1通用类库@ver1.0.1
在上篇 Windows.Andy.Code4App.dll Win8.1/WP8.1通用类库@ver1.0.0 已经对Win8.1和WP8.1部分扩展通用类库做了说明,这篇继续对通用类库做扩展.写的 ...
- Windows.Andy.Code4App.dll Win8.1/WP8.1通用类库@ver1.0.0
直接入题! Win8.1和WP8.1眼下已经渐渐融为一体,WP8.1不断向Win8.1靠拢,虽然一些方法上WP8.1和Win8.1不同(ps:WP8.1和Win8.1的不同之处),但大部分还是相同的. ...
- vmware P2V迁移域内windows服务器脱域问题
windows 域服务器采用vmware converter进行物理机转换为虚拟机,需要在完成后进行退域重新加域操作. 否则,有可能会出现服务器在30天后脱域情况.出现脱域情况,可以通过退域加域的方式 ...
- oracle11g R2数据库的迁移(同windows系统迁移)使用RMAN
实验环境:windows 2008 R2 & windows 2008 R2 Oracle版本:11.2.0.1.0 源数据库端: 为保证在恢复之后的数据库中得到一致的数据,应禁止用户对数据的 ...
- 迁移桌面程序到MS Store(9)——APPX With Desktop Extension
在<迁移桌面程序到MS Store(8)——通过APPX下载Win32Component>中我们讨论了通过APPX来下载Service部分的安装包.但是纯UWP的客户端并不能自动运行下载的 ...
- 2019-10-15-从以前的项目格式迁移到-VS2017-新项目格式
title author date CreateTime categories 从以前的项目格式迁移到 VS2017 新项目格式 lindexi 2019-10-15 14:9:27 +0800 20 ...
- 理解 .NET Platform Standard
相关博文:ASP.NET 5 Target framework dnx451 and dnxcore50 .NET Platform Standard:https://github.com/dotne ...
- Win10 UWP开发实现Bing翻译
微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...
- UWP开发入门系列笔记之(一):UWP初览
标签: 随着微软Build2015带来的好消息,Win10正式版发布的日子已经离我们越来越近了,我们也终于欣喜地看到:一个统一的Windows平台对于开发人员来说充满了吸引力,这局棋下的好大的说--于 ...
随机推荐
- Android studio下载依赖包很慢
build gradle文件 buildscript { repositories { //jcenter() maven { url 'http://maven.oschina.net/conten ...
- Android安全之Https中间人攻击漏洞
Android安全之Https中间人攻击漏洞 0X01 概述 HTTPS,是一种网络安全传输协议,利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护交换数据的隐私与完整性. ...
- 一 java线程的等待/通知模型
java 中线程之间的通信问题,有这么一个模型:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个线程.前者是生产者,后者就是消费者 ...
- NSURLSession的基本使用
一.简单说明 在iOS9.0之后,以前使用的NSURLConnection过期,苹果推荐使用NSURLSession来替换NSURLConnection完成网路请求相关操作. NSURLSession ...
- OD使用教程12
载入程序输入关键字: 双击进入程序 仔细看发现并没有跳转直接跳到这个mov,往上看发现retn上面有一个push,在这种编写手法当中这种组合相当于一个jmp, 跳到离它最近的一个值(在这就是004A5 ...
- 今天我们要说的画一个三角形,恩,画一个三角形,第一种呢是利用我们的html标签结合css来实现;而第二种方法就就是我们的html5新增的一个标签canves,这个canves就是网页画幕,那么顾名思义就是在网页里建造一个画板,用来画画,好,那接下来就和我一起去看看吧!
第一种方法:利用我们的html标签结合css来实现 span{ width:0px; height:0px; border-width:7px; border-style:solid; border- ...
- install mysql using binary and configure manu
(1)下载,解压 (2)初始化数据库 ./scripts/mysql_install_db --defaults-file=../my.cnf --user=guofeng (3)启动命令 ./bin ...
- CentOS访问Windows共享文件夹的方法
CentOS访问Windows共享文件夹的方法 1 在地址栏中输入下面内容: smb://Windows IP/Share folder name,smb为Server Message Block协议 ...
- LightOJ Beginners Problems 部分题解
相关代码请戳 https://coding.net/u/tiny656/p/LightOJ/git 1006 Hex-a-bonacci. 用数组模拟记录结果,注意取模 1008 Fibsieve's ...
- JBOSS内存参数详解
JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m -Xss512k -XX:PermSize=128m -XX:MaxPermSize=25 ...