2010-11-23 65 views

回答

62

OpenWrap是一个开源项目,在应用程序中提供依赖管理,不仅在构建时,而且在运行时也是如此。因此,我们的功能主要针对动态解析依赖关系,无论是复合WPF应用程序,Web应用程序开发还是系统级应用程序。这使得我们的实现与NuGet的实现非常不同。

所以这里是不同的东西(我可能会忘记很多,但啊)。

  • 在Visual Studio中无依赖,并专注于在命令行的生产力,而不是在UI
  • 在PowerShell中没有任何依赖,OW带有自己的指挥系统,可以让你开发,部署和执行你的自己的命令,无论是从我们的shell(o.exe工具)还是从MSBuild本身。
  • OpenWrap使用OpenWrap来构建和部署自己,并且在每一步的xcopy友好。
  • 有包的全系统的资源库,这样你就可以部署工具命令一次,而不是每个解决方案
  • 在运行时支持动态依赖解析,应该要做到这一点
  • 有一个可扩展的封装格式,所以你可以在一个包中创建新类型的依赖关系,并有OpenWrap帮助你使用它们在你的应用程序
  • 同时支持OpenWrap包和的NuGet包和存储库
  • 住从XML和OData的并发症得好远,而只是以简单的基于文本的DSL,易于学习和快速学习
  • 支持集成构建,这样你就可以建立和打包在一个解决方案中去
  • 支持网络共享,你可以从openwrap壳或MSBuild任务
  • 提供的依赖练级发布到定制库,自动选择其中包的版本组合解决
  • Resharper集成意味着您对您的依赖关系所做的任何更改都会实时反映在VS中
  • TeamCity集成意味着您可以使用完全相同的流程构建,打包和部署包,从MSBuild脚本或从命令行
  • 名扩展建设者意味着你可以改变如何构建的OpenWrap
  • 支持内触发测试运行和运输试验一起包
  • 用途支持的MSBuild扩展点包括装配引用,并留下你一个人建的代码。一旦你发布了二进制文件,,你只有在构建时没有openwrap代码相关性

这只是为了区别,因为这就是你问到的,所以我不会打扰你与其他软件包管理者一样。

+3

openwrap.org(其主页)被破坏,维基页面被黑客攻击,并且3年内没有提交任何提交。在OSS世界中,这意味着某些事情正在**死亡**! – Mrchief 2015-06-02 21:23:53

+3

嗯,是的,但是你对11年前的帖子发表评论.Nuget工具赢了,没什么可看的,继续前进。 – SerialSeb 2015-07-16 11:08:48

+2

那你不应该更新你的答案吗?老实说,IDK为什么这个问题保持开放,它并没有遵循SO指导原则。我添加了评论作为帮助,以便它可以节省未来的访问者时间。 – Mrchief 2015-07-16 11:12:28

57

只是想与来自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扩展库进行安装,并且很容易立即开始使用。
  • NuGet支持将客户端指向包含一组软件包的目录(或网络共享)并自动将其视为存储库。所以如果你不想处理OData,你不必这样做。但是我们也包含了我们的图库的实现,所以在任何情况下都不需要手动处理OData/XML。
  • NuGet不要求您将NuGet的任何部分作为应用程序的一部分进行部署。它始终保持关注,并专注于自动执行在没有NuGet获取和部署依赖关系的情况下执行的步骤。正如Seb指出的那样,OpenWrap也不例外。我只是想说清楚,NuGet不需要这个。
17

NuGet的关键原则之一(和OpenWrap的一个重要区别)是它不会尝试改变你的工作方式。相反,它可以使你现在已经做的事情变得更容易。

举例说,你正在尝试使用一个Foo库,它依赖于一个Bar库。今天,您必须手动查找这些库,将它们复制到您的机器并添加对它们的引用。然后更新的版本会出来,你会通过类似的动作来获得更新。

在这种情况下,NuGet和OW都可以轻松地引入这些引用,但关键的区别在于NuGet以完全非侵入的方式进行操作。即它将把二进制文件放到你的机器上,并以与手动完成相同的方式引用它们。完成之后,您的项目文件是完全“正常”的,在构建或运行时与NuGet没有任何关系。

这意味着如果你通过NuGet获得一些图书馆并将你的项目放在源代码管理中,那么另一个开发人员就可以使用你的项目而不需要NuGet了。

OpenWrap方法也有其优点,但要走这条路线,您必须愿意一路使用OpenWrap,并且不能轻易远离它。

还有很多其他的不同之处(比如NuGet中丰富的VS支持),但这是我认为两者之间最根本的区别。