为什么NuGet会把包放在;解决方案级别;?

为什么NuGet会把包放在;解决方案级别;?,nuget,nuget-package,Nuget,Nuget Package,将nuget包添加到项目时,它会将程序集放在解决方案级别的/packages文件夹中 我知道有很多方法可以改变这一点,但我想知道为什么这是默认位置,因为出于以下原因,这似乎没有什么帮助: 1) 如果您有一个项目是多个解决方案的一部分,则/packages文件夹不一定位于项目所期望的位置 2) 您需要为其他团队成员手动将其签入源代码管理,这比将其作为需要它的项目的一部分要方便得多 3) 如果您将项目移动到文件系统上的其他位置,或移动到没有完整代码库的其他计算机,则它将找不到预期的/packages

将nuget包添加到项目时,它会将程序集放在解决方案级别的/packages文件夹中

我知道有很多方法可以改变这一点,但我想知道为什么这是默认位置,因为出于以下原因,这似乎没有什么帮助:

1) 如果您有一个项目是多个解决方案的一部分,则/packages文件夹不一定位于项目所期望的位置

2) 您需要为其他团队成员手动将其签入源代码管理,这比将其作为需要它的项目的一部分要方便得多

3) 如果您将项目移动到文件系统上的其他位置,或移动到没有完整代码库的其他计算机,则它将找不到预期的/packages文件夹

如果NuGet只在项目中使用/packages文件夹,而不是解决方案,那么所有这些问题似乎都可以解决。这似乎是一个更符合逻辑的地方来放置项目所依赖的包


所以。。。我假设在解决方案级别这样做有一些很好的理由,我希望有人能给我一些启发。

您应该阅读一下,这篇文章解释了如何使用nuget而不向源代码管理提交包,并解决了您问题的第1点和第3点:

我认为这是为了节省磁盘空间。如果您有一个包含50个项目的大型解决方案,并且在其中每个项目中都使用了一个包,那么最终您将得到该包的50个副本、二进制文件和所有文件。而在这方面,将它们保持在解决方案级别要有效得多

在源代码管理方面,您不应该将实际的包文件夹放在那里。只需添加packages.config文件,或者按照David Ebbo在博客文章中提到的建议执行,或者创建一个简单的批处理文件,根据它可以找到的packages.config文件下载所有包


创建自己的公司nuget feed不需要太多努力,因此您可以将您的私人软件包保存在其中。

Hmmmm,这可能会有所帮助。nuget会自动下载旧版本的软件包吗?i、 e.如果我从版本控制中获取一些源代码,其中包括某个nuget提供的程序集的v1.1,而该程序集的当前版本是3.4,那么会发生什么?创建oru自己的nuget提要是否有助于解决此问题?从那篇博文听起来,使用私有和公共nuget提要的人无法使用所描述的技术。我的另一个担忧是,我觉得我们需要在源代码管理的某个地方使用这些程序集,b/c如果我们需要对一些4年前的代码执行维护,我们需要拥有与项目一起部署的程序集的版本。因此,如果它们必须进行源代码管理,为什么不将它们包括在项目中?如果您无法从代码中复制程序集,那么,在我看来,您需要考虑这是否会给您带来问题。它为我工作的公司服务,所以我们已经将自动构建、打包和发布以及使用semver放在适当的位置,这使我们能够重新创建任何版本的任何程序集,也可以将普通的东西向前移动,而不用担心破坏依赖它的一切。如果我的回答的最后一部分引起了冒犯,我很抱歉,没有人是有意的,我只是指出,如果你觉得需要它,设置它并不困难。如果它是为了节省磁盘空间,它是非常短视的。COM和dll有人吗?我一定是遗漏了什么。COM dll地狱是一个系统上只能有一个dll版本的问题。我仍然要处理一个使用COM的网站,所以我知道得太清楚了(每次我走近它,我都会在里面死一点!!)。NuGet将不同版本的包(以及DLL)存储在不同的文件夹中。