博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET Core 之 MSBuild 介绍
阅读量:5991 次
发布时间:2019-06-20

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

前言

关于 .NET Core 旧版本的 sdk 介绍可以参看我以前的 文章。

8 个小时前,.NET Core 项目组释放了 .NET Core 新一轮的 sdk 工具更新,即 RC4 版本 ,这个版本也就是意味着基本功能已经确定了,下个版本应该就是RTM版了,会随着 Visual Studio 2017 正式版释放出来。

众所周知,从Tools RC3 版本开始,微软已经抛弃了原来的 project.json 改为了 MSBuild 工具进行项目文件格式,这么做有好有坏,我想很大原因是为了兼容以前的项目吧。

不管喜不喜欢以前的 MSBuild 这个风格,都已经是事实了,所以还是先提前了解一下最新的SDK 内容比较实际点吧。

从 project.json 迁移到 MSBuild

很简单,只需要下载最近版本的 Visual Studio 2017 RC版,然后会帮你自动迁移。

MSBuild(Microsoft Build Engine),它代表微软Visual Studio 的项目构建工具,这是一种基于 XML 的文件格式。

RC4 SDK 的一些改进和更改

比起以前的 sdk dotnet 命令,新的 sdk 最大的改进就是关于脚手架的一些工作,首先就是 dotnet new 命令。

dotnet new

在使用 dotnet new 命令后,不会默认创建一个控制台 Hello World 程序,而是会显示以下。

250417-20170208115918713-831301491.png

根据提示可以看到,需要制定相应的模板类型名称,这个改进我认为是非常不错了,也就是当使用非 Visual Studio 开发工具时,我们可以和容易的创建一个模板程序,而不用从头开始。 这和使用 Yeoman 非常像,并且方便。

还有一个特点是,模板并不是一成不变的,它具有更新功能,并且具有可扩展性,任何人都可以编写自己的模板使用 dotnet new 命令,当前目前的 dotnet new 还不具备上述的一些功能,微软会在后面的几个月完善它。

在使用 dotnet new创建一个程序的时候,除了指定模板类型外,还可以指定需要使用的框架。

dotnet new console -f 框架名

或者可以使用 dotnet new console --help 来查看本机都安装了哪些框架。

project.json vs MSBuild

下面是两个分别使用 以前的 project.json 方式和新的 msbuild 方式创建的两个MVC项目,然后来看看他们项目文件之间的区别。

project.json

{  "userSecretsId": "aspnet-WebApplication-0799fe3e-6eaf-4c5f-b40e-7c6bfd5dfa9a",  "dependencies": {    "Microsoft.NETCore.App": {      "version": "1.1.0-preview1-001153-00",      "type": "platform"    },    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",    "Microsoft.AspNetCore.Diagnostics": "1.0.0",    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",    "Microsoft.AspNetCore.Mvc": "1.0.1",    "Microsoft.AspNetCore.Razor.Tools": {      "version": "1.0.0-preview2-final",      "type": "build"    },    "Microsoft.AspNetCore.Routing": "1.0.1",    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",    "Microsoft.AspNetCore.StaticFiles": "1.0.0",    "Microsoft.EntityFrameworkCore.Sqlite": "1.0.1",    "Microsoft.EntityFrameworkCore.Tools": {      "version": "1.0.0-preview2-final",      "type": "build"    },    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",    "Microsoft.Extensions.Configuration.Json": "1.0.0",    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",    "Microsoft.Extensions.Logging": "1.0.0",    "Microsoft.Extensions.Logging.Console": "1.0.0",    "Microsoft.Extensions.Logging.Debug": "1.0.0",    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {      "version": "1.0.0-preview2-update1",      "type": "build"    },    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {      "version": "1.0.0-preview2-update1",      "type": "build"    }  },  "tools": {    "Microsoft.AspNetCore.Razor.Tools": {      "version": "1.0.0-preview2-final",      "imports": "portable-net45+win8+dnxcore50"    },    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {      "version": "1.0.0-preview2-final",      "imports": "portable-net45+win8+dnxcore50"    },    "Microsoft.EntityFrameworkCore.Tools": {      "version": "1.0.0-preview2-final",      "imports": [        "portable-net45+win8+dnxcore50",        "portable-net45+win8"      ]    },    "Microsoft.Extensions.SecretManager.Tools": {      "version": "1.0.0-preview2-final",      "imports": "portable-net45+win8+dnxcore50"    },    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {      "version": "1.0.0-preview2-final",      "imports": [        "portable-net45+win8+dnxcore50",        "portable-net45+win8"      ]    }  },  "frameworks": {    "netcoreapp1.1": {      "imports": [        "dotnet5.6",        "dnxcore50",        "portable-net45+win8"      ]    }  },  "buildOptions": {    "debugType": "portable",    "emitEntryPoint": true,    "preserveCompilationContext": true  },  "runtimeOptions": {    "configProperties": {      "System.GC.Server": true    }  },  "publishOptions": {    "include": [      "wwwroot",      "**/*.cshtml",      "appsettings.json",      "web.config"    ]  },  "scripts": {    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ],    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]  },  "tooling": {    "defaultNamespace": "WebApplication"  }}

msbuild

netcoreapp1.0
aspnet-test-A18C8943-54AF-4FC4-A73D-6130613B8C7C

可以看出,两者的区别还是蛮大的。

其他

关于 RC4 Tools 其他 sdk 命令,和以前的没多大区别,创建一个项目并运行的基本的流程仍然是

dotnet new consoledotnet restoredotnet builddotnet run

本文地址:

作者博客:
欢迎转载,请在明显位置给出出处及链接

你可能感兴趣的文章
8、表中数据的排序与分组
查看>>
链表(建立+插入+删除+输出)
查看>>
Kooboo CMS的安装步骤
查看>>
Apache 性能调优-参考篇
查看>>
1. SVM简介
查看>>
sphinx 增量索引 及时更新、sphinx indexer索引合成时去旧和过滤办法(转)
查看>>
MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件
查看>>
[AX2012 R3]关于Alerts
查看>>
[Linux] - CentOS 安装nginx
查看>>
JNI编程(一) —— 编写一个最简单的JNI程序
查看>>
Openssl sess_id命令
查看>>
http://blog.sina.com.cn/s/blog_5b9b4abe01017638.html
查看>>
Android进阶——深入浅出Handler(一)
查看>>
CSS float 定位和缩放问题
查看>>
Solr学习之五
查看>>
[na]vrrp两用(网关冗余+服务器热备)
查看>>
opencv学习笔记(一)IplImage, CvMat, Mat 的关系
查看>>
xpath
查看>>
为什么GPL是更好的开源许可证?
查看>>
Tcpdump命令行 与 GUI Wireshark
查看>>