本文来和大家聊聊在 dotnet 5 和 dotnet 6 或更高版本的 dotnet 构建完成,在 bin 文件夹下,输出的 ref 文件夹。在此文件夹里面,将会包含项目程序集同名的 dll 文件,但是此 dll 文件的大小却很小,那这个文件夹是用来做什么的

在使用 dotnet 5 或更高版本的 dotnet 的项目时,将会发现在项目的输出路径,将多了一个叫 ref 的文件夹,大概路径如下 bin\Release\net6.0-windows\ref\ 此文件夹里面只包含了项目程序集同名的 dll 文件。而且此文件夹的删除不会影响到项目的执行

放在 ref 这里的程序集其实叫仅引用程序集,从 官方文档 Reference assemblies Microsoft Docs 可以看到,这里的程序集 dll 文件,其实只是包含公开的成员。例如公开的类型和公开的方法和属性等,而不包括实际的实现逻辑

在 dotnet 5 添加 ref 文件夹的一个用途是为了解决增量构建的问题,在很多大项目上,项目之间有很多引用,如果引用关系里面较底层的某个项目的代码被更改,如果没有一个好的增量构建机,最差情况下,需要将被更改的项目的上层项目全部重新构建。重新构建项目将让开发者进行摸鱼

在 dotnet 5 添加的 ref 文件夹将记录项目里的公开成员,大家都知道,如果公开的成员没有变更,那就是不需要重新构建引用项目,运行代码是兼容的,只是代码的行为变更。这就是 ref 文件夹的重要功能,用来提升开发速度,减少重新构建

那如果自己的项目本来就是不考虑被其他项目所引用的,或者说不想再加一个 ref 文件夹,可以在 csproj 上添加如下代码,添加下面代码,将在构建的时候,不会生成 ref 文件夹和不会生成仅引用程序集

<PropertyGroup>
<ProduceReferenceAssembly>false</ProduceReferenceAssembly>
</PropertyGroup>

以上代码将禁用创建仅引用程序集文件,也就是将不会生成 ref 文件夹

除了修改 csproj 还可以更改 msbuild 命令,在命令加上 /p:ProduceReferenceAssembly=false 参数也可以

更多请看:

Reference assemblies Microsoft Docs

dotnet 5 的 bin 文件夹下的 ref 文件夹是做什么用的的更多相关文章

  1. shell脚本实现查找文件夹下重复的文件,并提供删除功能

    Windows下有软件FindDupFile,可以搜索指定目录及其下子目录,列出所有内容完全相同的文件(文件名可能不同),然后由用户选择删除重复的文件. 然而shell脚本却可以使用几行的命令完成与此 ...

  2. Android开发系列(十七):读取assets文件夹下的数据库文件

    在做Android应用的时候,不可避免要用到数据库.可是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客攻克了我前面博客中 ...

  3. 怎么查看linux文件夹下有多少个文件(mac同样)

    查看目录下有多少个文件及文件夹,在终端输入 ls | wc -w 查看目录下有多少个文件,在终端输入 ls | wc -c 查看文件夹下有多少个文件,多少个子目录,在终端输入 ls -l |wc -l ...

  4. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

  5. php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名

    <?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...

  6. C#实现把指定文件夹下的所有文件复制到指定路径下以及修改指定文件的后缀名

    1.实现把指定文件夹下的所有文件复制到指定路径下 public static void copyFiles(string path) { DirectoryInfo dir = new Directo ...

  7. C/C++不同文件夹下包含头文件的方法及#include的使用

    转自:http://blog.sina.com.cn/s/blog_6e0693f70100so42.html 本文主要介绍了如何不同文件夹下使用预处理器指示符#include. 假设我们有如下一个工 ...

  8. 递归输出文件夹下的所有文件的名称(转自 MSDN)

    问题:如何输出给定文件夹目录下面的所有文件的名称? C#代码: using System; using System.IO; namespace MyTest { public class Progr ...

  9. IO流的练习3 —— 复制多级文件夹下的指定文件并改名

    需求:复制指定目录下的指定文件,并修改后缀名. 指定的文件是:.java文件. 指定的后缀名是:.jad 数据源所在文件夹:C:\Users\Administrator\Desktop\记录 目的地所 ...

  10. C/C++遍历Windows文件夹下的所有文件

    因为文件夹中往往包含文件和文件夹.想要遍历所有的文件,必须遍历文件夹中所有的文件夹.很显然,这个描述满足递归的两个要素:(1)问题的规模在不断的缩小,且新问题的模式与旧问题相同.很显然文件夹中含有子文 ...

随机推荐

  1. 三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析

    三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析 OBJ格式是一种常用的三维模型文件格式,它存储了三维模型的几何信息和纹理坐标等相关属性.在大规模场景中加载和渲染三维模型时,OBJ格式的 ...

  2. window10-yarn-使用vite创建vue3项目失败-文件夹或目录不正确

    前置条件 window10 本地已经安装nodejs yarn已经通过npm全局安装(npm install -g yarn) 问题 yarn脚手架方式搭建vue3项目失败(command faile ...

  3. 使用现代身份验证(OAuth)调用 EWS 服务

    我的博客园:https://www.cnblogs.com/CQman/ 转载: https://mp.weixin.qq.com/s?__biz=MzU0MzUxMzU2NA==&mid=2 ...

  4. 工作记录:Vue3.0新特性

    简单对比 Vue2.x 与 Vue3.x 响应式 Vue2 使用Object.defineProperty劫持对象的属性 Vue3 使用Proxy 直接代理对象 由于Object.defineProp ...

  5. 快速上手系列:CSS

    一 选择符 1 通配:*{} 所有元素 类:p{} 如 p 标签等相应元素 ID:#id{} 使用相应 id 属性的元素样式 类:.类名{} 使用相应 class 属性的元素样式 包含:div p{} ...

  6. ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020

    论文指出one-stage anchor-based和center-based anchor-free检测算法间的差异主要来自于正负样本的选择,基于此提出ATSS(Adaptive Training ...

  7. Makefile 简单学习

    一.Makefile 简介 Makefile 是一种常用于编译的脚本语言.它可以更好更方便的管理你的项目的代码编译,节约编译时间(没改动的文件不编译).注意 Makefile 文件命令必须是 Make ...

  8. 【Java面试题】Hibernate

    六.Hibernate 50)简述一下 hibernate 的开发流程 第一步:加载 hibernate 的配置文件,读取配置文件的参数(jdbc 连接参数,数据 库方言,hbm 表与对象关系映射文件 ...

  9. Linux服务器程序规范化

    Linux日志体系 rsyslogd守护进程既能接收用户进程输出的日志,又能接收内核日志.用户进程是通过调用syslog函数生成系统日志的.该函数将日志输出到一个UNIX本地域socket类型(AF_ ...

  10. LeetCode 416. 分割等和子集(bitset优化)

    LeetCode 416. 分割等和子集 1 题目描述 给你一个只包含正整数的非空数组nums.请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 1.1 输入测试 示例 1: 输入 ...