繁体   English   中英

为什么visual studio会在Azure DevOps签入时排除BIN和OBJ文件夹

[英]Why does visual studio exclude BIN and OBJ folders at Azure DevOps checkin

我想知道在Visual Studio中使用Visual Studio或Git-Bash在Azure DevOps上签入代码的通用方法是什么。 发生的问题是bin文件夹包含许多第三方dll,它们在构建项目之前保留在源中。 投射这些第三方dll是必要的。 但是在登录Azure DevOps后,bin和obj不存在。 这是由.gitignore和.gitattribute文件引起的。 我已经删除了这两个文件并检查了bin文件夹。 这两个文件的目的是什么。 有人可以建议一种解决方法。

排除

.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中不可用。 在这种情况下,您可以按照以下步骤在项目中添加引用。

  1. 在项目中创建一个名为lib的文件夹

在此输入图像描述

  1. 在该文件夹中添加DLL

在此输入图像描述

  1. 右键单击DLL->转到Properties ,然后将BuildAction更改为NoneCopy to Output DirectoryDo not copy DLL

在此输入图像描述

  1. 最后,从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM