博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net Core迁移到MSBuild的多平台编译问题
阅读量:4677 次
发布时间:2019-06-09

本文共 1938 字,大约阅读时间需要 6 分钟。

一、前言

  本篇主要讨论.NET Core应用程序项目结构的主题,重点探索.NET Core应用程序的多平台编译问题,这里指的多平台是指.NET Framework、.NET Core App、.NET Standard、Mono、UWP等多平台的条件编译、项目(包)引用、编译符号等问题。

  .NET Core已经将新的项目管理配置过渡回MSBuild编译系统中。虽然现在可以从无到有的使用VS2017来创建一个新的MSBuild项目,但是还是有好多遗留程序使用着以JSON格式存储的项目配置文件为基础的项目。Scott Hanselman也在博客中发文教大家怎么使用新的.NET SDK RC4工具将project.json转换到MSBuild的.csproj项目系统。当然这篇文章也解释了MS为什么要这么做。

  MSBuild 是一种基于 XML 的项目文件格式的项目配置文件。这种格式容易理解、易于扩展并且完全受 Microsoft 支持。MSBuild 项目文件的格式使开发人员能够充分描述哪些项需要生成,以及如何利用不同的平台和配置生成这些项。另外,项目文件的格式还使开发人员能够创作可重用的生成规则,这些规则可以分解到不同的文件中,以便可以在产品内的不同项目之间一致地执行生成。

  当时ASP.NET Core的第一个版本为了使开源平台对开发者更具吸引力,ASP.NET Core采用了一种基于JSON的项目系统project.json文件定义,这是一种与Node.js类似的定义,这对于吸引Web开发者来说是个明智的选择。但是随着.NET Core的整体开源,非Web开发者如UWP和Xamarin,对这种JSON项目结构并不熟悉。这些开发者和社区都希望继续使用MSBuild的XML项目系统。因些微软宣布他们将为.NET Core重新启用和规范MSBuild构建系统。在最新的.NET Core SDK 1.0 RC4 版本中,dotnet cli(命令行接口,dotnet cli 1.0.0-preview3-004056及以后版本)已经包含了”dotnet migrate”命令,这个命令为了将JSON为基础的配置项目转换为.csproj项目配置文件。

本文不再谈论如何使用新dotnet cli命令行,而卓重讨论多平台编译问题。

二、定义多平台

project.json

在project.json项目配置中定义多平台,使用的是”frameworks”节点来配置的,并且在每个平台节点下也配置了对应的项目引用或依赖。

下面的实例使用project.json定义的多平台和依赖如下:

"frameworks": {    "net451": {      "frameworkAssemblies": {        "System.Xml": "4.0.0.0",      }    },    "netstandard1.6": {      "dependencies": {        "System.Runtime":"4.1.0",        "System.Xml.XmlSerializer": "4.0.11"      },    }}

MSBuild

在.csproj项目配置中定义多平台,要使用”TargetFrameworks”的XML节点来配置:

netstandard1.6;net45;

如果要定义某个平台下的依赖引用的话需要如下定义:

当然有时候我们还需要对某个平台定义,定义编译符号常量:

$(DefineConstants);NETSTANDARD

这些代码中就可以针对平台特性来编写代码了:

#if NETSTANDARD    //netstandard1.*平台代码#endif

如果我们想在某个平台下,只编译某些文件,也是可以实现的:

三、结语

说实话MSBuild的项目配置系统还是比较灵活的,以后整个dotnet体系的构建过程也都得到了统一。在dotnet cli中也集成了msbuild,即dotnet build。

 

 

GitHub: 如果觉还可以请Star下, 欢迎一起交流。

.NET Core 开源学习群:

转载于:https://www.cnblogs.com/maxzhang1985/p/6481549.html

你可能感兴趣的文章
门面(Facade)模式
查看>>
html第一堂课
查看>>
IPv6 03-IPv6路由协议
查看>>
跨域请求
查看>>
Web 开发中很实用的10个效果
查看>>
HTML5上传文件显示进度
查看>>
友盟错误日志分析(转自:COCOACHINA shemy )
查看>>
HDU5336-XYZ and Drops-模拟
查看>>
powershell 查看程序的tcp网络连接
查看>>
C++技术问题总结-第12篇 设计模式原则
查看>>
Spring的事件处理
查看>>
利用Android属性动画实现Banner的原理与实践
查看>>
【MySQL案件】mysql登录-S失败
查看>>
白话经典算法系列之中的一个 冒泡排序的三种实现
查看>>
Eclipse断点调试
查看>>
ubuntu 步步为营之uclinux编译和移植(完整版)
查看>>
取消SVN版本号控制的bash脚本
查看>>
ASP.NET 后台接收前台POST过来的json数据方法
查看>>
Python(简单图形和文件处理)编程
查看>>
C#写点酷玩意,波形图控件
查看>>