签入nuget包

签入nuget包,nuget,source-control-explorer,Nuget,Source Control Explorer,我的应用程序几乎没有nuget软件包引用。我是否也应该将packages文件夹签入到源代码管理?我的目的是使源代码可供其他开发人员使用,并保持引用的稳定版本。如果我用最新的nuget更新更新了项目,并且应用程序中断,那么我想从源代码管理中获取一个特定版本的可依赖DLL 或者我应该创建一个库文件夹并从包文件夹中删除DLL,然后检查我以前在其中执行的操作吗?并且只在本地管理软件包文件夹?因为运行错误版本的nuget软件包可能会严重破坏您的应用程序,我喜欢让他们签入,尽管看起来有很多膨胀。从长远来看,

我的应用程序几乎没有nuget软件包引用。我是否也应该将packages文件夹签入到源代码管理?我的目的是使源代码可供其他开发人员使用,并保持引用的稳定版本。如果我用最新的nuget更新更新了项目,并且应用程序中断,那么我想从源代码管理中获取一个特定版本的可依赖DLL


或者我应该创建一个文件夹并从文件夹中删除DLL,然后检查我以前在其中执行的操作吗?并且只在本地管理软件包文件夹?

因为运行错误版本的nuget软件包可能会严重破坏您的应用程序,我喜欢让他们签入,尽管看起来有很多膨胀。从长远来看,这只会节省我的团队时间

如果需要的话,使用library文件夹还可以让某人更新nuget包。他们需要记住将它移动到这个新的库文件夹并引用它

值得记住的是,当您更新nuget软件包时,旧版本仍保留在packages文件夹中,仅供参考


最后,如果您有自动构建系统,那么使用Nuget Restore之类的工具可能不起作用,因为它们需要项目中包含的引用DLL,并且不会自动下载它们。

您必须权衡Nuget软件包在源代码管理中与否的利弊,并自行决定。选择完全取决于你

如果我用最新的nuget更新更新了项目,并且应用程序中断,我想从源代码管理处获得一个特定版本的可靠DLL

这两种方法都支持。如果不签入NuGet包,则应签入每个项目的packages.config文件。此文件记录所用NuGet软件包的版本。因此,您可以签出旧版本的源代码,它将使用旧版本的NuGet软件包。NuGet.org上的NuGet包永远不会被删除

NuGet站点提供了我在这里引用的源代码管理包,您可能不想忽略这些包:

分布式版本控制系统(DCV)包括存储库中每个文件的每个版本,频繁更新的二进制文件可能导致存储库大量膨胀,克隆存储库需要更多时间。 对于存储库中包含的包,团队成员可以直接向磁盘上的包内容添加引用,而不是通过NuGet引用包。 要“清理”解决方案中任何未使用的包文件夹变得更加困难,因为您需要确保不删除任何仍在使用的包文件夹

未将NuGet包检查到源代码管理中的问题可能发生在生成服务器或网络连接受限的情况下。在构建服务器上,您需要访问internet,或者提供一个本地目录,其中包含项目正在使用的NuGet包。此外,您还需要在生成项目之前运行
NuGet.exe restore
,或者使用基于MSBuild的包还原(NuGet团队已弃用)。请注意,如果在Visual Studio中使用最新版本的NuGet,则在生成项目时会自动恢复NuGet包。其他IDE也有类似的功能,或者至少有一种方法可以在不必从命令行使用NuGet.exe的情况下恢复包

在源代码管理中使用NuGet包的好处是,您不依赖NuGet,其他开发人员可以使用源代码并使用它,而无需恢复任何NuGet包

请注意,将DLL移动到libraries文件夹中意味着您没有获得NuGet的全部好处。NuGet希望DLL位于packages目录中,所有引用都指向此目录中的DLL,因此将DLL移动到libraries文件夹意味着您将无法使用NuGet更新项目

<> P:所考虑的方法是:

  • 将包目录签入源代码管理
  • 不要将packages目录签入源代码管理,而是依赖NuGet恢复包
  • 根本不要使用NuGet。将二进制文件放在一个单独的目录中,并签入源代码管理

  • 几天前我问自己这个问题。我发现了这一页:也许它也会帮助你。你的答案与马特所说的一致。我决定只签入packages.config。我现在还没有一个自动构建。