首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.net core迁移实践:项目文件csproj的转换

.net core迁移实践:项目文件csproj的转换

作者头像
梁规晓
发布于 2020-11-05 02:38:37
发布于 2020-11-05 02:38:37
1.5K00
代码可运行
举报
文章被收录于专栏:DotNet程序园DotNet程序园
运行总次数:0
代码可运行

随着net core的不断更新和生产可用,越来越多的人把现有的应用迁移和部署到net core平台。本文将分享迁移过程中的一个环节,给大家做一下参考。

背景说明

先来介绍一下什么是SDK样式的文件结构。关注net core发展的同学应该对早期的项目定义文件project.json还有点印象。

.net开发组在net core 1.0版本时是准备抛弃xml格式的csproj文件而改为json格式的project.json来定义和描述项目的。

但是后来主要由于MSBuild的兼容问题,不得不放弃project.json转移回xml格式的csproj(详见https://devblogs.microsoft.com/dotnet/announcing-net-core-tools-msbuild-alpha/)。

然而由于传统.net framework的csproj文件内容繁杂,可读性和操作性较差,因此微软重新定义了新样式的csproj文件内容样式。

其最大化的保持了和原有xml属性的兼容,并添加了一些新的特性。由于新格式的csproj文件总是以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Project Sdk="Microsoft.NET.Sdk"></Project>

标记来定义,所以称之为SDK样式。

一个典型的.net framework平台的csproj文件结构如下图所示:

其中包含了项目的编译配置、调试生成配置、大量的nuget文件依赖、大量的cs源代码文件路径等,造成了此文件内容的非常繁多,阅读和分析都有比较大的困难。

而SDK样式的csproj文件内容就非常精简了,如下图所示:

其中TargetFrameworks配置项目的多目标平台,可选的值有netstandard2.1;net451;netcoreapp3.1,三种格式分别代表net standard、net framework、net core目标平台。

此处的配置根据各人的项目定位不同设置所需的值。我们公司的业务程序是跑在特定的运行容器下的,迁移过程也是分阶段展开,最终我们采取先同时编译两个目标平台dll的方案。

由以上对比可见,SDK样式的csproj内容精简的一大原因就是文件的依赖(cs源码和nuget包文件)不需要在csproj中明确写明。

针对cs源码及目录结构,VS自动识别项目目录内的文件结构作为项目结构,这一点改变真是点赞。

因为文件及目录不需要csproj这个中间层再多一次描述,相当于“所见即所得”,相信大家在平时肯定遇到磁盘的源文件存在而VS项目就是看不到等类似问题,以后不会再有困惑啦。

另外针对nuget包依赖的文件也是如此,csproj不再维护nuget包内的文件明细,而改为PackageReference以nuget包为单位来管理依赖。

这个改变对我们的转换几乎没有影响,重新添加一次nuget引用即可;

同时再说一句:net core是不支持packages.config文件管理nguet包,建议大家提前就将nuget包的管理改为PackageReference方式;

csproj文件转换的操作步骤

有了以上的背景说明,接下来的工作就是针对要迁移的项目csproj文件执行改造,其实微软也提供了一些辅助工具(dotnet try-convert等)来帮助迁移。

但是必须先保证迁移操作明确和无误后,才能逐步使用特定的辅助工具来提高效率。具体操作如下:

1. 直接备份原csproj文件然后将其清空
2. 然后粘贴如下最小化的xml代码:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.1;net451</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
</Project>
3. 调整的依赖nuget包和直接引用的程序集dll

这一步对nuget包有要求,需要其提供netstandard平台的版本,如下图:

如果是公司内部的nuget包就需要提前做好支持,而如果是依赖的第三方nguet包那就需要确认是否有net core支持了。

不过当前net core已成趋势,绝大多数流行的nuget包都能够支持了。

4. 检查和处理源代码中不兼容的部分

由于从.net framework迁移到.net core确实存在部分代码不兼容的地方,因此需要一一识别并寻找替代方案。

微软官方提供了不兼容说明,大家可以参考本文末尾的链接【从 .NET Framework 迁移到 .NET Core 的中断性变更】。

这里提供几种常见的不兼容情况:

  1. CallContext不兼容:可以通过Asynclocal 替换解决。
  2. 原System.ComponentModel.DataAnnotations不兼容:需要单独安装nuget包System.ComponentModel.Annotations即可解决。
  3. System.Runtime.Remoting不兼容:暂无替换方案
5. 删除:Properties文件夹的AssemblyInfo.cs
6. 删除:packages.config文件。
7. 提醒:调整CI配置

输出目录Debug/Release目录内也分别生成了netstandard2.1和net451的2套程序集。因此假如应用了CI的话,相关设置也需要更新。

完成以上操作后,项目的结构就变成了下图的样子,这样编译通过后会生成针对特定目标平台的程序集。

总结

本文首先介绍了SDK样式的csproj文件的背景,并详细介绍了从传统.net framework项目转换到net core项目的关键步骤。

根据各企业的项目规模和应用场景的不同,还需要制订合理的迁移计划,配合严格的测试工作,这样才能保证迁移工作的稳定推进,尤其要避免的是因迁移net core而带来服务异常甚至是生产事故。

祝大家迁移顺利!

参考资料

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.NET Core迁移前的准备工作
从 .NET Framework 迁移到 .NET Core 的中断性变更
从 packages.config 迁移到 PackageReference
从 .NET Framework 移植到 .NET Core 的概述
.NET可移植性分- 析器
.NET API 分析器
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet程序园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何利用IoT技术推动云产品市场增长?腾讯云实时互动-物联版的破局之道
gavin1024
2025/07/29
950
“海大宇”相继入局,安防企业们为何钟情于“锁”
“即便别的市场再大、机会再多,我们还是会继续专注自己的主航道。”这是放在几年前,一众安防大佬对于是否做智能锁的标准答案。
AI掘金志
2019/08/29
5160
“海大宇”相继入局,安防企业们为何钟情于“锁”
解锁智能锁下半场的密码:技术依然是核心
原创丨作者:罗超 9月26日,智能锁头部品牌德施曼官宣代言人迪丽热巴登上微博热搜,同天德施曼发布了旗舰新品3D人脸大屏智能锁Q50FMax。据奥维云网(AVC)数据显示,在定价2000元以上的高端智能锁市场中,德施曼智能锁的市场份额占比高达76%,成为当之无愧的高端智能锁代表企业。此次德施曼聘请明星代言人是行业进入到品牌塑造阶段的缩影。 01锁定品牌的下半场 近年来智能家居加速破圈,对于很多家庭来说“智装”成了跟“软装”、“硬装”一样的标配。在上百个智能家居产品品类中,最先普及的是智能锁。“家”不容侵犯
罗超频道
2022/10/08
7290
解锁智能锁下半场的密码:技术依然是核心
智能家居逐渐清晰 AI将成引爆点
企鹅号小编
2017/12/27
7380
智能家居逐渐清晰 AI将成引爆点
To B or To C,一场智能锁三极之战
To B OR To C, 渐渐不再是一个非此即彼的问题,主攻市场的楚河汉界变得模糊,渠道扩张的泾渭不再分明,怎么玩不重要,吃上这口蛋糕才重要。
AI掘金志
2020/04/28
4820
智哪儿评测:飞利浦DDL708-FVP系列人脸可视智能锁
智能锁千千万,谁是你的NO.1。又是一期智哪儿评测,这次我们为大家带来的是飞利浦的DDL708-FVP系列的人脸可视智能锁。作为飞利浦智能锁最新推出的旗舰机型,DDL708-FVP人脸可视智能锁可以说是我的「梦中情锁」,因为它具备一切我能够想象出来的,一款智能锁该具备的功能。同时,最关键的一点,它又具备非常高的颜值,装在门上以后,开发商自带的防盗门估计都要提升一个档次。当然,为了做评测,我们还是把它装了在展架上。
智哪儿
2023/07/25
2990
智哪儿评测:飞利浦DDL708-FVP系列人脸可视智能锁
移康智能朱鹏程:做产品就要直击痛点,多余的功能只会是噱头 | 镁客请讲
作为国内首批进入智能家居产业的公司,移康智能已经在细分领域占领了过半市场。 据前瞻数据库数据显示,2016年我国智能家居市场规模达605.7亿元,同比增长50.15%。与此同时,据统计,2016年我国智能家居渗透率只有0.1%,远远落后于美国的5.8%、日本的1.3%、瑞士的1.3%和德国的1.2%。这也就意味着,我国智能家居市场尚未挖掘的市场还很大。 近一年来,从去年10月份正式发布的Google Home,到今年相继发布的HomePod、小爱同学、天猫精灵……可以说,如今只要提起智能家
镁客网
2018/05/30
5080
网络安全宣传周 - 智能门锁 IC 卡复制漏洞
随着智能家居技术的迅速发展,智能门锁作为保障家庭安全的重要设备,逐渐普及。然而,其安全性问题也日益凸显。IC 卡复制漏洞成为黑客突破智能门锁密码认证的一种潜在途径,给用户的家庭安全带来了严重威胁。
Khan安全团队
2024/08/19
2960
C端难买账,B端靠“打包”,智能门锁的锁真解开了?
4月,智能门锁品牌“凯迪仕”完成近1亿美元B轮战略融资,为行业单轮最高融资;在“2020中国准独角兽企业100强榜单”中,国内智能门锁服务平台云丁科技排名前列;在刚刚过去的618,小米智能门锁品类全平台销额突破2亿元。
用户2908108
2021/07/22
2750
三分钟了解下大数据应用方向
提到大数据搜索,作为全球最大的搜索引擎google,同时也是我们公认的大数据的鼻祖。储着全球万亿网页数据,发明了GFS分布式文件系统,也是因为他抓取几乎所有能访问的网页 以及采用pageRank做网页排名发明了MapReduce分布式计算框架,有了谷歌的探索才有了后来大数据搜索应用的百花齐放。
house.zhang
2021/08/23
1.6K0
实时互动-物联版如何为企业和个人带来革命性的变化?腾讯云IoT Video的破壁实践
gavin1024
2025/07/29
1000
萤石网络618全面加码兴趣电商 Y3000极光系列人脸智能锁火爆出圈
618年中大促落幕,各家电商平台战报出炉,京东618战报显示,智能家居产品成为众多家庭品质生活的“刚需”。在智能家居赛道中,聚焦科技创新的萤石,正通过全产品、全场景、全渠道的布局,吸引着众多消费者。
智哪儿
2023/06/26
2110
萤石网络618全面加码兴趣电商  Y3000极光系列人脸智能锁火爆出圈
智能家居市场 | 以智能视频监控助力安全放心 | 解读行业
懒人阅读:2016年中国智能家居市场规模达到642.4亿元,预计到2020年,智能家居的市场规模将达到2975.37亿元人民币。用户更注重功能的实用性,安防类智能家居是最先落地的智能家居产品,一般包含智能监控设备、红外报警设备和智能门锁。投入此市场的代表性厂商主要有4个,分别是Apple、GE、Google、Microsoft、Verizon、AT&T、Comcast等
用户7623498
2020/08/04
5070
智能家居市场 | 以智能视频监控助力安全放心 | 解读行业
AI家居设备的未来:智能家庭的下一个大步
过去几年,智能家居设备已经实现了巨大的发展,这些设备可以通过互联网连接并使用传感器、摄像头、智能控制器等技术实现自动化控制和智能化交互。这些设备包括智能灯具、智能家电、智能安防系统、智能音响、智能门锁等。
哈__
2024/05/03
5630
AI家居设备的未来:智能家庭的下一个大步
2019年智能家居十大关键词
AIoT已经成为物联网行业的热词,AI(人工智能)赋能IoT(物联网),智能家居自然也不会放过这个智能化升级的最佳通道。
刘盼
2019/05/17
7870
2019年智能家居十大关键词
智能家居四大派:忘掉该死的入口思维
科技正在钻进用户的家。Google的客厅拼图越来越全,chromecast电视棒市场份额已超Apple TV,今年,就是2014年先后将Nest和Dropcam收入囊中,更是激活了整个智能家居行业。苹果推出HomeKit,三星、微软纷纷跟进,国内百度、阿里和小米对智能家居的热情有增无减,创业者更是纷纷涌入想要做下一个Nest,或者Dropcam。不过,智能家居厂商思路却是十分的丰富多彩,大致有这么几个派系。 入口派:互联网的思维定式 如果要排名,“入口”应该是2014年最被滥用的词。PC时代渠道为王的思维
罗超频道
2018/04/28
6930
腾讯发布智能门锁安全规范,守卫物联网产业链安全
随着物联网与人工智能、云计算和大数据的深度融合,人们的日常生活也开始从移动互联网步入物联网时代,智能门锁便是其中的重要一环。但陌生指纹开锁、照片骗过人脸识别等消息不时曝出,让智能门锁的安全性屡受质疑。
腾讯云物联网团队
2019/12/22
1.6K3
响铃:被带偏的智能家居,如何才能“逃出生天”
近日,中兴在京召开了智能家居战略发布会,大喊包含“单品、整合、开放”三大要素的IOC产品战略。这把响铃的注意力再次拉回到这个“看似热闹,实则不温不火”的领域。2014年,自谷歌收购恒温器公司Nest后,智能家居迎来爆发,包括海尔、美的、长虹等家电企业,中兴、华为等通信设备企业,以及京东、阿里巴巴等互联网企业都以不同的方式切入智能家居市场,而主推智能家居概念的创业公司也迎来一波集中喷发,大受风投资金热捧。奥维咨询也预测,2020年中国智能家居的整体产值将突破万亿元,看起来一片欣欣向荣。
曾响铃
2018/08/20
5060
响铃:被带偏的智能家居,如何才能“逃出生天”
背靠上市公司的斑点猫,做超级猫眼的目的其实不是卖猫眼?
日前,有“亚洲建材第一展”之称的中国建博会(2018年)在广州召开,与往年不同的是,今年这个展会不只是传统家居建材商的舞台,还多了大量的智能家居公司参展,展会也设置了多个智能家居主题馆,单单是涉及入户安全这个领域的就有超过350家品牌参展,既有飞利浦、松下等国际品牌,也有万兴科技旗下的物联网家居安全品牌斑点猫、家庭基础电器智能公司欧瑞博等国内智能家居明星公司。“罗超频道”在展会现场对万兴科技董事长吴太兵进行了采访,对智能家居市场也有了更深入的了解。
罗超频道
2018/07/23
6070
背靠上市公司的斑点猫,做超级猫眼的目的其实不是卖猫眼?
让每个家庭都拥有一个“钢铁侠”管家
比尔·盖茨在1997年建成的豪宅“未来之屋”,让智能家居进入了大家的视线。电影《钢铁侠》则进一步满足了我们对智能家居的想象,“钢铁侠”托尼·史塔克以老管家的名字打造的智能系统贾维斯(J.A.R.V.I
BestSDK
2018/02/28
1.4K0
让每个家庭都拥有一个“钢铁侠”管家
推荐阅读
相关推荐
如何利用IoT技术推动云产品市场增长?腾讯云实时互动-物联版的破局之道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验