.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(太长了截取一部分)

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

  1. 生成单个文件:这个就是字面意思,通过将所有依赖应用程序的文件捆绑到一个二进制文件中,这种方式适用于将项目用作第三方库或者应用程序,方便传输管理。
  2. 启用ReadyToRun编译:可以通过将应用程序集编译为 ReadyToRun (R2R) 格式来改进 .NET Core 应用程序的启动时间和延迟。R2R 二进制文件通过减少应用程序加载时实时 (JIT) 编译器需要执行的工作量来改进启动性能。
  3. 裁剪未使用的程序集:也是字面意思,目前还是预览版,无法可靠地分析各种有问题的代码模式(主要集中在反射使用),应用程序的生成时间分析可能会导致运行时失败。这个功能最有用的应该是独立发布的方式,通过裁剪以减小部署大小。

.net 知新:【3】.net 5 项目结构说明和发布部署的更多相关文章

  1. vue2.0项目结构和打包发布

    先来一张项目结构图: 本地开发测试运行的命令是npm run dev 打包发布的命令是 npm run build生成的dist文件夹里的文件就是我们可以布置到服务上的文件 但是呢,这打包好的文件的文 ...

  2. 在windows环境下部署nuxt项目(线上发布部署)

    因为公司项目需要兼容SEO,同时我们也一直希望能够真正的实现前后端分离,于是毫不犹豫的选择了nuxt. 话说要重构前后端分离真是一个大工程,由于各种原因我们团队花了近两年时间都没有完成,最近才又重启把 ...

  3. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  4. .NET CLI简单教程和项目结构

    WHAT IS .NET CLI ? .NET 命令行接口 (CLI) 工具是用于开发.生成.运行和发布 .NET 应用程序的跨平台工具链. 来源:.NET CLI | Microsoft Docs ...

  5. 认识ASP.NET 5项目结构和项目文件xproj

    ASP.NET 5 在项目结构上做了很大的改变,我们以前熟悉的目录结构与项目文件内容都不太一样了,本篇文章带大家了解 ASP.NET 5 到底跟以前有哪些不一样的地方. 我们先用 Visual Stu ...

  6. 1.2 认识ASP.NET MVC项目结构

    1.开发环境 操作系统:xp.vista.windows 7.windows 8.windows server 2003|2008|2008R2|2012: 集成开发环境IDE: Vsiual Stu ...

  7. maven(一)初步搭建,项目结构

    一.环境准备 java环境, jdk 1.5 以上 MyEclipse集成工具,我装的是8.5 版本 二.快速安装及配置 1.下载maven: http://maven.apache.org/docs ...

  8. MVC 5 第二章 项目结构

    通过本章学习,你将了解到一个MVC 5应用程序的项目组成以及项目文件的相关信息,从而更好地架构设计出自己的项目结构. 单从MVC的字面意思我们便能够注意到M-模型, View-视图, Controll ...

  9. flask开发restful api系列(7)-蓝图与项目结构

    如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而 ...

随机推荐

  1. java处理方法的多个返回值

    我第一次接触到元组是在java编程思想这本书中,当时我正为方法的多个返回值苦恼.因为我之前处理多个返回值方法的时候,要不建一个新的实体类,要不在接收的方法中建立一个对象,返回值之前给其赋值,要不通过异 ...

  2. mybatis入“坑”第一步

    一.导入坐标 要想通过maven创建一个简单的mybatis项目,首先需要的是要导入相关的坐标.需要导入的坐标如下: <dependencies> <!--mysql驱动坐标--&g ...

  3. 源码学习之void 0

    今天看源码的时候看到 void 0 这样的写法,平时在业务代码里基本没有这样的写法,于是学习了一下. 在控制台运行了一下void 0,得到返回值是undefined. 在MDN上搜了一下void,了解 ...

  4. 『无为则无心』Python基础 — 7、Python的变量

    目录 1.变量的定义 2.Python变量说明 3.Python中定义变量 (1)定义语法 (2)标识符定义规则 (3)内置关键字 (4)标识符命名习惯 4.使用变量 1.变量的定义 程序中,数据都是 ...

  5. 【TCP/IP】TCP服务器并发处理&源码

    前言 本笔记记录的是 单个服务端并发式处理多个客户端. 下次有空在发个 单线程多个服务端并发式处理多种客户端.其实就是本笔记的一个改良版,用到select() / poll() / epoll(). ...

  6. 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单

    目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...

  7. Dagger2入门,以初学者角度

    2016-12-21 更新:添加@Subcomponent注解以及Lazy与Provider的使用,本文基本完结!如果有好的建议请提出,感谢大家的支持,谢谢 依赖注入 Dagger2是Android中 ...

  8. Nginx网站服务

    1.常见的网站服务 静态网站服务: Apache服务 nginx服务 动态网站服务: Tomcat服务 PHP 2.nginx网站服务特点 (1)nginx具有高并发(特别是静态资源).占用系统资源少 ...

  9. MySQL数据库企业集群项目实战(阶段三)

                              MySQL数据库企业集群项目实战(阶段三) 作者 刘畅 时间 2020-10-25 目录 1 架构拓扑图 1 1.1 方案一 1 1.2 方案二 2 ...

  10. springboot整合拦截器如何让其不拦截默认的访问路径

    1.注册自定义拦截器2.拦截器3.控制器4.其它说明:我想做控制拦截登陆,将所有的请求拦截下来判断如果当前的session里没有用户名则跳转到登陆页面.问题是目前可以拦截所有请求了,但第一次进入登陆页 ...