OpenWrap与NuGet

时间:2010-11-23 14:31:05

标签: .net nuget openwrap

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

3 个答案:

答案 0 :(得分: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扩展点来包含程序集引用,并保留单独构建的代码。一旦发送二进制文件,就没有开放代码依赖,仅在构建时。

这只是差异所在,因为这就是你所问的内容,所以我不会打扰你和其他包经理那样做。

答案 1 :(得分: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也不要求这样做。

答案 2 :(得分:16)

NuGet的一个关键原则(与OpenWrap的一个重要区别)是它不会试图改变你的工作方式。相反,它可以让你更容易完成你今天已经做过的事情。

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

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

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

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

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