OpenWrap与NuGet

Mak*_*yuk 54 .net openwrap nuget

OpenWrap和NuGet有什么区别.你更喜欢什么?

Ser*_*Seb 64

OpenWrap是一个开源项目,提供应用程序中的依赖项管理,不仅在构建时,而且在运行时.

因此,我们的功能针对动态解决依赖关系,无论是复合WPF应用程序,Web应用程序开发还是系统范围的实用程序.这使得我们的实现与NuGet的实现截然不同.

所以这里有不同的东西(我可能会忘记很多,但很好).

  • 不依赖于visual studio,而是专注于命令行而非UI中的工作效率
  • 不依赖于powershell,OW带有自己的命令系统,可以让你开发,部署和执行自己的命令,无论是从我们的shell(o.exe工具)还是从MSBuild本身.
  • OpenWrap使用OpenWrap来构建和部署自己,并且在每一步都是xcopy友好的.
  • 拥有系统范围的软件包存储库,因此您可以一次部署实用程序命令,而不是每个解决方案一次
  • 如果您想这样做,则支持运行时的动态依赖项解析
  • 具有可扩展的包格式,因此您可以在包中创建新类型的依赖项,并让OpenWrap帮助您在应用程序中使用它们
  • 支持OpenWrap包和NuGet包和存储库
  • 远离XML和OData的复杂性,可以轻松快速地学习基于文本的简单DSL
  • 支持集成构建,因此您可以一次构建和打包解决方案
  • 支持可以从openwrap shell或msbuild任务发布到的网络共享上的自定义存储库
  • 提供依赖性调配,自动选择解析哪个版本的软件包组合
  • Resharper集成意味着您对依赖项所做的任何更改都会实时反映在VS中
  • TeamCity集成意味着您可以使用完全相同的过程,从MSBuild脚本或命令行构建,打包和部署程序包
  • 可扩展构建器意味着您可以更改在OpenWrap中触发构建的方式
  • 支持测试跑步者和运输测试以及包裹
  • 使用支持的MSBuild扩展点来包含程序集引用,并保留单独构建的代码.一旦发送二进制文件,就没有openwrap代码依赖,仅在构建时.

这就是差异所在,因为这就是你所要求的,所以我不会打扰你,因为我们和其他包经理一样.

  • openwrap.org(它的主页)被破坏,维基页面被黑了,并且3年没有看到任何提交.在OSS世界中,这转化为**死**! (3认同)
  • 嗯,是的,但是你评论了一篇可以追溯到11年的帖子.Nuget工具赢了,没有什么可看的,继续前进. (3认同)
  • 你不应该更新你的答案吗?老实说IDK为什么这个问题保持开放,无论如何都不遵循SO指导原则.我添加了评论作为帮助,以便它可以节省未来访客的时间. (2认同)

Haa*_*ked 59

只想与NuGet方面的一些想法相提并论.Seb遗漏了一些值得指出的细节.

  • 虽然我们的主要UI是基于VS的,但核心NuGet程序集与VS没有任何联系.ASP.NET Web Pages产品具有基于Web的包管理器.我写了一篇博文,展示了使用NuGet构建一个在运行时自我更新的网站的一个例子.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 Extension Gallery进行安装,并且非常容易立即开始使用.
  • NuGet支持将客户端指向包含一组包的目录(或网络共享),并自动将其视为存储库.因此,如果您不想处理OData,则不必.但我们还包括我们的库的实现,因此无论如何都不需要手动处理OData/XML.
  • NuGet不要求您将NuGet的任何部分部署为应用程序的一部分.它保持不变,专注于自动执行您无需NuGet获取和部署依赖项所需的步骤.要明确,正如Seb指出的那样,OpenWrap也没有.我只想说清楚NuGet也不需要这个.

  • 菲尔,我将重申我之前多次说过的话.您不必将OpenWrap的任何部分作为构建结果的一部分.OpenWrap包含在构建内部以在请求时添加引用,而不是直接使用csproj文件,这是构建时唯一的区别.我们也支持运行时,如果那是人们想要的. (13认同)
  • Seb,我从未说过Open Wrap,但我可以看到我的最后一句话表明它确实如此.我已根据你的评论澄清了这一点.谢谢你向我澄清! (13认同)

Dav*_*bbo 16

NuGet的一个关键原则(与OpenWrap的一个重要区别)是它不会试图改变你的工作方式.相反,它可以让您更轻松地完成您今天已经完成的工作.

比如说您正在尝试使用Foo库,这取决于Bar库.今天,您必须手动查找这些库,将它们复制到您的计算机并添加对它们的引用.然后更新的版本将出来,你将通过类似的动作来更新它们.

在这种情况下,NuGet和OW都可以很容易地引入这些引用,但关键的区别在于NuGet以完全非侵入性的方式完成它.即它会将二进制文件放到您的机器上并以与手动完成相同的方式引用它们.完成后,您的项目文件完全"正常",在构建或运行时与NuGet没有任何关系.

这意味着如果你通过NuGet获得一些库并将你的项目放在源代码控制中,那么另一个开发人员就可以使用你的项目而根本不需要NuGet.

OpenWrap方法也有优点,但是要走这条路,你必须愿意一直使用OpenWrap,并且不能轻易地离开它.

还有许多其他差异(比如NuGet中的富VS支持),但我认为这是两者之间最根本的区别.

  • 看到对菲尔的回应.你显然没有多少使用OpenWrap断言我以某种方式锁定人并强迫他们分发OpenWrap作为构建结果的一部分.特别是考虑到两个工具可以并排运行而没有问题,并且OpenWrap支持NuGet包,但不是相反... (15认同)