首页 > 编程语言 >C#中的bin和obj文件夹有什么用?

C#中的bin和obj文件夹有什么用?

时间:2023-03-04 12:45:12浏览次数:53  
标签:bin 文件 obj 项目 C# 编译 文件夹

原文网址:https://zhuanlan.zhihu.com/p/435379436

Bin目录用来保存项目生成后程序集,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。

obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置

 

obj和bin文件什么区别和联系

1.bin

bin目录用来保存项目生成后程序集,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。

在添加引用时,.NET会记录添加的引用绝对路径,这些设置保存在“每用户”文件中,(Solution.csproj.user),可以通过记事本打开查看。也可以在:项目属性—>通用属性—>引用路径里面查看。如果设置复制到本地为true,在生成项目时会自动拷贝该DLL到项目生成文件夹中(bin目录),否则不会拷贝。在生成项目时,对所添加的引用的是绝对路径,而在运行时程序集默认只在当前所在的路径下去找。要修改引用的路径,必须通过编程的方法去实现。使用References 对象。

在bin\debug\目录中有两个文件,除了要生成的.exe或.dll文件外,还有个.pdb文件,这个.pdb文件中就记录了代码中的断点等调试信息。一般移植或者打包程序只需要Debug文件即可,里面包含.exe文件、.dll文件、.ini文件、.xml文件、.pdb文件、.lib文件、.config、.manifest文件、.png文件、.gif文件、.cur文件、自定义文件夹等。

在\bin\release\目录下只有一个.exe或.dll文件,Release模式下不包含调试信息,并对代码进行了优化。

2.obj

obj目录是用来保存每个模块的编译结果,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。

 

obj这个目录,在开发过程中可能会捣乱,比如你的一个引用的dll,更新了,然后你在vs开发环境里面重新删除后,又重新引用,或者直接更新引用了。因为每次编译时默认都是采用增量编译的原因,所以,这个时候,不论你点多少次编译,你会疑惑,明明是更新引用了,为什么新更新的那些函数和接口不存在,这个时候,你可以手工吧obj目录都删除掉一下,然后重新引用下,就可以正确的看到你更新的那些接口和函数了。
这个事实说明,obj在开发过程中,也是会被引用到的,并不只是在编译的时候起作用。

 

都可以删掉,
重新编译又生成了

 

Properties文件夹 定义你程序集的属性 项目属性文件夹 一般只有一个 AssemblyInfo.cs 类文件,用于保存程序集的信息,如名称,版本等,这些信息一般与项目属性面板中的数据对应,不需要手动编写。
  .cs 类文件。源代码都写在这里,主要就看这里的代码。
  .resx 资源文件,一些资源存放在这里,一般不需要看。
  .csproj C#项目文件,用VS打开这个文件就可以直接打开这个项目,自动生成,不需要看。
  .csproj.user 是一个配置文件,自动生成的,会记录项目生成路径、项目启动程序等信息。也不需要看。
  .Designer.cs 设计文件,自动生成,不需要看。
  .aspx 是网页文件,HTML代码写在这里面。
  sln:在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合
  *.sln:(Visual Studio.Solution) 通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。
  比如是生成Debug模式,还是Release模式,是通用CPU还是专用的等

标签:bin,文件,obj,项目,C#,编译,文件夹
From: https://www.cnblogs.com/bruce1992/p/17178086.html

相关文章

  • CSS & JS Effect – Blue Tick Avatar
    效果 难点难题只有一个,那就是如何把bluetickimage定位当avatar的右下角. HTML<divclass="avatar-wrapper"><imgclass="avatar"src="../images/ava......
  • [From 2.4]C#编译器和程序集链接器(以及一些它们的命令开关)
    原文:https://blog.csdn.net/weixin_30481087/article/details/96836436C#编译器:(用csc命令来使用C#编译器)程序集链接器(AssemblyLinker):(用al命令来使用C#编译器)除了使用......
  • Spring Boot @Scheduled 是同步还是异步,单线程还是多线程?
    @schedule刚开始用的时候回遇到一些坑,主要就是他的同步、异步、多线程的配置问题,这篇文章介绍了@schedule的使用方法,读者遇到问题时可以参考下。1.问题@schedule注解默......
  • 第2章 C语言提高专题篇
    指针入门到精通(一)指针是什么​ 如果在程序中定义了一个变量,在对程序进行编译时,系统就会给该变量分配内存单元,编译系统根据程序中定义的变量类型,分配一定长度的空间​ ......
  • acwing 297 赤壁之战
    给定一个长度为n的序列,求它有多少个长度为m的严格递增子序列。  f[i][j]+=f[i-1][k](a[k]<a[i],k<i)  优化:维护前缀和,根据a[k]<a[i] ,以a[]为下......
  • leetcode-1154-easy
    DayoftheYearGivenastringdaterepresentingaGregoriancalendardateformattedasYYYY-MM-DD,returnthedaynumberoftheyear.Example1:Input:date......
  • leetcode-1185-easy
    DayoftheWeekGivenadate,returnthecorrespondingdayoftheweekforthatdate.Theinputisgivenasthreeintegersrepresentingtheday,monthandyea......
  • 汇川AM401(Scanner) 和Easy521 (Adapter)的EIP通信
    1,导出Easy系列的EDS文件,配置Easy521的收发字节大小  2,导入Easy系列的EDS文件,配置AM401的收发字节大小    3,AM401作为Scanner的EIP通讯诊断代码......
  • leetcode-1528-easy
    ShuffleStringYouaregivenastringsandanintegerarrayindicesofthesamelength.Thestringswillbeshuffledsuchthatthecharacterattheithposi......
  • leetcode-1470-easy
    ShuffletheArrayGiventhearraynumsconsistingof2nelementsintheform[x1,x2,...,xn,y1,y2,...,yn].Returnthearrayintheform[x1,y1,x2,y2,...,xn,yn]......