.net 知新:【3】.net 5 项目结构说明和发布部署
.net 5的项目目录结构和.net framework有些明显的变化,包括显示结构和项目文件,从这两个方面看看有哪些变化。
项目目录结构
就以上篇用的demo项目为例(【.net 知新:【2】 .Net Framework 、.Net 5、 .NET Standard的概念与区别】),先看看.net 5项目目录结构。

.net5 项目和原来.net framework项目最大的不同在于引用和项目文件,.net 5变成了依赖项,里面清晰的区分了包、分析器、框架、项目等内容,这样分门别类更方便我们查找和管理引用。

.net framework的所有引用都显示在一起,包括其它项目、nuget包、dll等等引用。但是他们最终都是用项目文件来管理这些东西,所以我们再看看他们项目文件的差异。
项目文件
在两个项目中都引用了nuget包 Newtonsoft.Json,添加了ClassLibraryTest项目引用,建了一个Class1.cs的类文件。
在项目里面找到项目文件.csproj,打开两个文件对比,左边是.net 5右边是.net framework 4.6.1。

相对于.net framewokr而言,.net 5项目文件会少很多内容:
在.net framework中所有引用类库都包含在项目文件中,.net 5是包含在框架中。
在.net framework中所有包含文件描述都在项目文件中,.net 没有任何项目包含文件的描述。
所以.net 5的项目文件描述信息在哪儿呢,现在我在项目中排除类文件Class1.cs。

再打开两个项目文件对比,折叠起其他项。
在.net 5中排除项用<Compile Remove="Class1.cs" />" 在编译的时候移除Class1.cs。
在.net framework中因为是包含了所有的项目文件,所以排除就将<Compile Include="Class1.cs" />移除就行了。
.net 5中的这个小的改动会让我们的项目文件大大减少,试想如果我们的文件成千上万个那么.csproj的大小和阅读.net 5就会是巨大优势。
.net 5中默认是包含所有文件,如果要排除某文件直接去除包含项就行了,但是作为一个正常项目不会有太多的排除而是大量的包含,所以.net 5的改动优化相当精妙。
.net 5可以直接双击项目就能在vs中打开.csproj,.net framework需要到目录中去打开。

项目发布
可在两种模式下发布使用 .NET 创建的应用程序,模式会影响用户运行应用的方式。
将应用作为独立应用,生成的应用程序将包含 .NET 运行时和库,以及该应用程序及其依赖项。 应用程序的用户可以在未安装 .NET 运行时的计算机上运行该应用程序。
如果将应用发布为依赖于框架的应用,生成的应用程序将仅包含该应用程序本身及其依赖项。 应用程序的用户必须单独安装 .NET 运行时。
默认情况下,这两种发布模式都会生成特定于平台的可执行文件。 不使用可执行文件也可以创建依赖于框架的应用程序,这些应用程序是跨平台的。
首先我们项目右键发布,选择文件夹方式发布,然后就生成了发布配置。

点击编辑或者设置可以进行发布项配置。如上面官方文档描述,有【独立】和【依赖框架】两种方式。
如果发布【依赖框架】那么运行环境需要安装.net 运行时,并且在发布配置“目标运行时”可以选择“可移植”,因为运行时是自主安装不需要包含,所以不需要发布指定的运行时。

如果选择【独立】那么“目标运行时”只能选择特定的。因为包含了.net运行时和库,所以需要进行选择。如果不选择特定平台,这样就没办法将.net运行时和库正确的发布。

发布项目,然后到发布目录看下两种方式的文件区别
- 依赖框架->可移植

- 独立->win-x64(太长了截取一部分)

以上就是发布的简单介绍,采用独立的方式发布时间会久一点,另外在发布配置里面还有个“文件发布选项”,有几个配置简单说明下,有兴趣的可以对比下发布的文件区别。

- 生成单个文件:这个就是字面意思,通过将所有依赖应用程序的文件捆绑到一个二进制文件中,这种方式适用于将项目用作第三方库或者应用程序,方便传输管理。
- 启用ReadyToRun编译:可以通过将应用程序集编译为 ReadyToRun (R2R) 格式来改进 .NET Core 应用程序的启动时间和延迟。R2R 二进制文件通过减少应用程序加载时实时 (JIT) 编译器需要执行的工作量来改进启动性能。
- 裁剪未使用的程序集:也是字面意思,目前还是预览版,无法可靠地分析各种有问题的代码模式(主要集中在反射使用),应用程序的生成时间分析可能会导致运行时失败。这个功能最有用的应该是独立发布的方式,通过裁剪以减小部署大小。
.net 知新:【3】.net 5 项目结构说明和发布部署的更多相关文章
- vue2.0项目结构和打包发布
先来一张项目结构图: 本地开发测试运行的命令是npm run dev 打包发布的命令是 npm run build生成的dist文件夹里的文件就是我们可以布置到服务上的文件 但是呢,这打包好的文件的文 ...
- 在windows环境下部署nuxt项目(线上发布部署)
因为公司项目需要兼容SEO,同时我们也一直希望能够真正的实现前后端分离,于是毫不犹豫的选择了nuxt. 话说要重构前后端分离真是一个大工程,由于各种原因我们团队花了近两年时间都没有完成,最近才又重启把 ...
- 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释
目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...
- .NET CLI简单教程和项目结构
WHAT IS .NET CLI ? .NET 命令行接口 (CLI) 工具是用于开发.生成.运行和发布 .NET 应用程序的跨平台工具链. 来源:.NET CLI | Microsoft Docs ...
- 认识ASP.NET 5项目结构和项目文件xproj
ASP.NET 5 在项目结构上做了很大的改变,我们以前熟悉的目录结构与项目文件内容都不太一样了,本篇文章带大家了解 ASP.NET 5 到底跟以前有哪些不一样的地方. 我们先用 Visual Stu ...
- 1.2 认识ASP.NET MVC项目结构
1.开发环境 操作系统:xp.vista.windows 7.windows 8.windows server 2003|2008|2008R2|2012: 集成开发环境IDE: Vsiual Stu ...
- maven(一)初步搭建,项目结构
一.环境准备 java环境, jdk 1.5 以上 MyEclipse集成工具,我装的是8.5 版本 二.快速安装及配置 1.下载maven: http://maven.apache.org/docs ...
- MVC 5 第二章 项目结构
通过本章学习,你将了解到一个MVC 5应用程序的项目组成以及项目文件的相关信息,从而更好地架构设计出自己的项目结构. 单从MVC的字面意思我们便能够注意到M-模型, View-视图, Controll ...
- flask开发restful api系列(7)-蓝图与项目结构
如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而 ...
随机推荐
- NOIP模拟测试23「mine·water·gcd」
mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...
- Linux命令大全之查看登陆用户信息
1,w +回车 2.who +回车 3.last+回车 4.lastlog+回车
- 动态路由协议与RIP配置
一.动态路由的概述 二.RIP路由协议工作原理 三.水平分割 四.RIP路由协议v1与v2的区别 五.实验配置 一.动态路由的概述 1.定义 动态路由是指利用路由器上运行的动态路由协议定期和其他路由器 ...
- kubelet分析-pvc扩容源码分析
kubernetes ceph-csi分析目录导航 存储的扩容分为controller端操作与node端操作两大步骤,controller端操作由external-resizer来调用ceph完成,而 ...
- IDEA打开文件时,关闭SonarLint自动扫描
操作步骤 1 打开 Preferences mac快捷键:command+, 2 搜索 SonarLint,取消勾选Automatically trigger analysis,保存设置
- 4、saltstack的使用
官方文档地址:http://repo.saltstack.com/#rhel 4.1.saltstatck介绍: 用户要一致,这里使用的是root用户: 用于批量管理成百上千的服务器: 并行的分发,使 ...
- 『无为则无心』Python序列 — 22、Python集合及其常用操作
目录 1.Python集合特点 2.Python集合的创建 3.操作集合常用API (1)增加数据 @1.add()方法 @2.update()方法 (2)删除数据 @1.remove()方法 @2. ...
- 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法
"为什么这个功能用不了?" 程序员:"清一下缓存" 上篇洞悉系列文章给大家详细介绍了MySQL的存储内幕:洞悉MySQL底层架构:游走在缓冲与磁盘之间.既然聊过 ...
- DB2某建表语句
DB2建表加注解的建表语句 CREATE TABLE table_name ( company CHARACTER(1) NOT NULL DEFAULT 'N', online CHARACTER( ...
- Java | 集合(Collection)和迭代器(Iterator)
集合(Collection) 集合就是Java中提供的一种 空器,可以用来存储多个数据. 集合和数组都是一个容器,它们有什么区别呢? 数组的长度是固定的,集合的长度是可变的. 数组中存储的是同一类型的 ...