2011-07-19 148 views
8

将nuget包添加到项目时,会将程序集放在解决方案级别的/ packages文件夹中。为什么NuGet将软件包放在“解决方案级别”?

我知道,有很多方法可以改变这一点,但我不知道为什么是这样的默认位置,因为它似乎这些原因非常无益的:

1)如果你有一个项目,是的一部分多个解决方案,/包文件夹不一定是你的项目预期的地方。

2)您需要将其手动检入到其他团队成员的源代码管理中,这比将其作为需要它的项目的一部分要方便得多。 3)如果您将项目移动到文件系统的其他位置,或移动到不具有完整代码库的其他计算机上,则无法找到它所期望的/ packages文件夹。

如果NuGet只是在项目中使用了一个/ packages文件夹,而不是解决方案,似乎所有这些都将被解决。这似乎是一个更合乎逻辑的地方放置项目依赖的软件包。

所以......我假设在解决方案层面有一些很好的理由,我希望有人能够启发我。

回答

4

你应该有这样的阅读,解释如何使用的NuGet不commiting包源控制,以及副作用解决点1和你的问题3:http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

+0

嗯,这可能有帮助。 Nuget会自动下载旧版本的软件包吗?即如果我从包含某个nuget提供的程序集v1.1的版本控制中获取一些源代码,并且该程序集的当前版本是3.4,会发生什么情况? – chrismay

2

我认为这是节省磁盘空间。如果你有一个包含50个项目的大型解决方案,并且你在每一个项目中使用了一个包,那么你最终会得到该包的50个副本,二进制文件和全部。而保持解决方案的水平在这方面要高效得多。

就源代码控制而言,您不应该将实际的包文件夹放在那里。只需添加packages.config文件,然后执行David Ebbo在mathieu提到的博客文章中建议的内容,或者创建一个简单的批处理文件以基于它可以找到的packages.config文件下载所有包。

创建自己的公司nuget feed没有太大的努力,所以你可以保留你的私人包在那里。

+0

创建oru自己的nuget feed有助于解决这个问题吗?听起来就像那篇博客文章中那样,使用私人和公共Nuget Feed的人都无法使用所描述的技术。我的另一个担心是我觉得我们需要在源代码管理*某处*,b/c中使用这些程序集,如果我们需要对4年前的代码执行维护,那么我们需要获得与该项目一起部署的程序集版本。所以如果他们必须进行源代码管理,为什么不把它们包含在你的项目中呢? – chrismay

+0

如果你不能从代码再现组件,那么你需要考虑是否会导致你的问题。它为我工作的公司提供服务,所以我们将自动化的构建,包装和发布与使用semver一起,使我们能够重新创建任何版本的任何程序集,并且将常见的东西向前移动,而不用担心会破坏一切取决于它。我很抱歉,如果我的答案的最后一部分引起了攻击,没有人打算,我只是指出,如果你觉得你需要它,设置并不困难。 –

+0

如果是为了节省磁盘空间,它是令人难以置信的短视。 COM和DLL地狱人? –

相关问题