54

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

4

3 回答 3

64

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

因此,我们的功能旨在动态解决依赖关系,无论是用于复合 WPF 应用程序、Web 应用程序开发还是系统范围的实用程序。这使得我们的实现与 NuGet 所做的非常不同。

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

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

这只是为了区别,因为这就是你所问的,所以我不会用我们和其他包管理器一样做的事情来打扰你。

于 2010-11-23T17:35:25.560 回答
58

只是想谈谈 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 也不需要这个。
于 2011-01-18T19:25:26.503 回答
15

NuGet 的主要原则之一(以及与 OpenWrap 的一个重要区别)是它不会尝试改变您的工作方式。相反,它使您今天已经在做的事情变得更加容易。

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

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

这意味着,如果您通过 NuGet 获得一些库并将您的项目置于源代码管理中,那么其他开发人员就可以使用您的项目,而根本不需要 NuGet。

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

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

于 2011-01-18T19:31:26.733 回答