OpenWrap vs NuGet
OpenWrap和NuGet有什么区别? 你喜欢什么?
OpenWrap是一个开源项目,在应用程序中提供依赖pipe理,不仅在构build时,而且在运行时。
因此,我们的function是针对依赖关系的dynamicparsing,无论是复合WPF应用程序,Web应用程序开发还是系统级应用程序。 这使得我们的实现与NuGet的实现非常不同。
所以这里是不同的东西(我可能会忘记很多,但是啊)。
- 不依赖于visual studio,专注于命令行的生产力而不是UI
- OW不依赖PowerShell,OW自带的命令系统可以让你开发,部署和执行自己的命令,无论是从我们的shell(o.exe工具)还是从MSBuild本身。
- OpenWrap使用OpenWrap来构build和部署自己,并且在每一步都是xcopy友好的。
- 有一个系统范围的软件包存储库,所以您可以一次性部署实用程序命令,而不是每个解决scheme一次
- 在运行时支持dynamic依赖parsing,如果你想这样做
- 有一个可扩展的包格式,所以你可以在包中创build新types的依赖关系,并让OpenWrap帮助你在你的应用程序中使用它们
- 支持OpenWrap包和NuGet包和存储库
- 远离XML和OData的复杂性,适用于简单且基于文本的DSL,学习起来既简单又快速
- 支持集成构build,因此您可以一次构build和打包您的解决scheme
- 支持您可以从openwrap shell或msbuild任务发布到networking共享上的自定义存储库
- 提供依赖关系均衡,自动select解决哪些版本的软件包组合
- Resharper整合意味着你对你的依赖做的任何改变都会被实时反映到VS中
- TeamCity集成意味着您可以使用完全相同的过程,从MSBuild脚本或命令行构build,打包和部署软件包
- 可扩展的构build器意味着您可以更改在OpenWrap中构build的触发方式
- 支持testing运行器和运输testing以及软件包
- 使用支持的MSBuild扩展点来包含程序集引用,并保留您独自构build的代码。 一旦你发布了二进制文件, 你只有在编译时才会有openwrap代码依赖 。
这只是为了区别,正如你所问的那样,所以我不会打扰你和其他软件包pipe理者一样。
只是想和NuGet的一些事情挂钩。 Seb留下了一些值得指出的细节。
- 虽然我们的主要用户界面是基于VS的,但核心NuGet程序集与VS没有任何联系。 ASP.NET网页产品有一个基于Web的包pipe理器。 我写了一篇博客文章,展示了使用NuGet构build一个在运行时更新自己的网站的例子。 http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx
- NuGet提供了一个强大的PowerShell控制台。 NuGet包可以添加新的命令到控制台。 请参阅http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/ 。 和以前一样,这是NuGet的一个客户端,NuGet核心并不需要它。
- NuGet可以通过VS扩展库进行安装,并且很容易立即开始。
- NuGet支持将客户端指向包含一组包的目录(或networking共享),并自动将其视为存储库。 所以如果你不想处理OData,你不需要。 但是我们也包含了我们的图库的实现,所以在任何情况下都不需要手动处理OData / XML。
- NuGet不要求您将NuGet的任何部分作为应用程序的一部分进行部署。 它保持着手,并且专注于自动执行没有NuGet获取和部署依赖的步骤。 要清楚的是,正如Seb指出的,OpenWrap也不是。 我只是想说清楚,NuGet并不需要这个。
NuGet的一个关键原则(和OpenWrap有一个重要的区别)就是它不会试图改变你的工作方式。 相反,它使得你现在已经做的事情变得容易得多。
举例来说,你正在尝试使用一个Foo库,它依赖于一个Bar库。 今天,您必须手动查找这些库,将它们复制到您的机器并添加对它们的引用。 然后更新的版本会出来,你会通过类似的动作,让他们更新。
在这种情况下,NuGet和OW都可以很容易地引用这些引用,但是关键的区别在于NuGet是以完全非侵入的方式进行的。 即它会将二进制文件放到您的机器上,并以与手动完成相同的方式引用它们。 完成之后,您的项目文件是完全“正常的”,在构build或运行时与NuGet没有任何联系。
这意味着如果你通过NuGet获得一些图书馆,并把你的项目放在源代码pipe理中,另一个开发人员就可以使用你的项目,而不需要NuGet。
OpenWrap方法也有其优点,但是要走这条路线,你必须愿意一路使用OpenWrap,而不能轻易地摆脱它。
还有很多其他的不同之处(比如NuGet中的VS支持),但我认为这是两者之间最根本的区别。