![](/img/trans.png)
[英]Why are bin and obj folders not getting created when I am building a csproj file on azure devops using pipeline?
[英]Why does visual studio exclude BIN and OBJ folders at Azure DevOps checkin
.gitignore旨在从源代码管理中排除内容。 例如,如果您的文件中包含连接字符串到开发文件夹中的数据库,则不希望将密码签入源代码管理中。 将二进制文件签入存储库是一种不好的做法。 您应该使用依赖关系管理系统(如Nuget,Chocolately,Maven,npm等)来指定依赖关系并下载它们。 您现在的方式就是将它们的多个副本签入多个项目,而不是在一个地方管理它们。 正确的依赖关系管理可能是.gitignore的默认版本排除某些文件夹的原因。 您还想重新生成obj文件夹的所有内容。 如果你有旧版本,时间戳会变得奇怪。 每次干净的构建意味着从没有任何编译工件的新副本开始。
.gitignore文件指定未跟踪的文件。 .gitattributes定义每个路径的属性。 它们是Git的配置文件。
在Visual Studio中,bin和obj文件夹用于存储编译器生成的输出(请参见此处 )。 由于这些输出文件是由编译器生成的,因此您不希望在源代码管理中跟踪它们。
如果您的项目需要引用某些第三方dll,最好的方法是将它们作为Nuget包引用,如果有可用于dll的Nuget包。 如果没有,你可以将它们放在bin或obj以外的文件夹中,这样就可以在Git中跟踪它们。 您不应将.gitignore更改为跟踪bin或obj文件夹。
要打开:即使您确实要检查bin
文件夹(并且,正如其他人提到的那样,您没有),请不要通过删除.gitignore
和.gitattributes
文件来执行此操作。
.gitignore
包含了不应该添加到您的库文件的列表。 这些文件不应与团队共享,如本地配置数据。 如果您在.vs
目录中提交SQLite数据,您将获得无数冲突并且无法拉动,因为Visual Studio将锁定该文件。
.gitattributes
包含一组配置,尤其适用于行结尾。 这必须存在于存储库中,供所有开发人员就设置达成一致,否则您将遇到有关空白的冲突。
如果您确实必须(并且必须)检查bin
目录中的文件,请恢复.gitignore
和.gitattributes
。 然后使用否定模式在.gitignore
明确列出它们:
!bin/foo.dll
但是 - 正如其他人所评论的那样 - 这仍然是一个坏主意。
因为大多数人已经提供了很好的答案。 我将为您提供有关如何处理第三方DLL(程序集)的一些想法
请记住,使用第三部分库的理想/最佳方式是通过NuGet Feed / Packages
在某些情况下,这些DLL在Nuget.org中不可用。 在这种情况下,您可以按照以下步骤在项目中添加引用。
lib
的文件夹 Properties
,然后将BuildAction
更改为None
并Copy to Output Directory
以Do not copy
DLL lib
文件夹添加引用 因此,当您将项目检入任何版本控件时,lib文件夹也将获得签入,在构建期间,引用也将从lib文件夹中获取。
再次记住,不要使用bin / obj文件夹来引用你的DLL,也不要使用bin-obj文件夹。 因为这些文件夹将在构建期间自动生成。
bin文件夹定义为存储第三方dll的错误位置。 将它们存储在其他地方并在构建期间将它们复制到bin文件夹,或者如果可用则使用NuGet包。 这是一个广泛使用的标准过程,用于将bin文件夹排除在检查源控件之外。 此外,如果您决定清理您的解决方案,您的bin文件夹将被清空,您的第三方dll将会消失。
另一点,由于您使用azure-devops
标签发布问题,azure-devops提供了强大的构建和测试管道。 这意味着您可以检入您的代码和托管构建服务器(标准方案, 如果您按照这种方式设置)将从源代码控制中提取代码并执行构建,运行一些测试,如果一切正常,则压缩您的二进制文件并放入他们在某个你可以下载它们的地方。 现在,您已经签入的垃圾箱中的垃圾箱会发生什么? 当服务器构建代码时,它们将被覆盖。 那么为什么要先检查它们呢? 如果服务器进行了清理(它不一定会这样做),那么你的第三方dll将会丢失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.