寻找msbuild和xbuild任务来获取引用的库(没有nuget.exe)

时间:2012-05-25 15:57:05

标签: c# nuget openwrap

我在基于mono。

为我的构建系统创建一个简单的解决方案时遇到了问题

目前的情况是我将我的引用库保留在git存储库中,这是不好的,原因很多。

我想要实现的就像NuGet提供的那样 - 自动从Web下载dll,将它们放在某个目录中并忘记它们。

我想在构建时执行此操作,因此下载库等不需要任何其他操作。最好的选择是msbuild(xbuild on mono)任务,但我希望它与系统无关,所以流行的,执行NuGet.exe,是不可能的(考虑并行单声道安装等)。

我尝试过Pepita项目,但它错了。不,真的,它有太多的设计错误,易于使用或修复。要进行正确的配置,需要对整个项目进行严格的重写。

喜欢的是一个库,它将使用NuGet.Core库并作为任务提供。如果没有这样的lib,我可以使用任何解决方案,下载nuget包并将其解压缩到.csproj中指定的目录。

更好的是,如果这样的库可以解析依赖关系而不在packages.config(或类似的)文件中明确指定它们,那将会很好。如果我想要包含Castle.Windsor我不想在我的配置文件中包含Castle.Core。

我了解OpenWrap项目(使用NuGet Gallery),它看起来很有前途,但我找不到解决方案,我只需在我的仓库中放置一个常量库一次,修改csproj文件,一些配置并完成它。

1 个答案:

答案 0 :(得分:2)

我可以告诉你,核心的OpenWrap具有内置的功能,可以满足您的需求。使用openwrap-shell可以执行的所有操作也可以从msbuild调用。所以,在我看来,你只需要添加一个before build钩子来调用openwrap来执行“update-wrap”。几个月前,我实际上考虑做类似的事情。 AFAIR我实际上写了一个msbuild脚本来调用openwrap任务,但是并没有真正将它们挂钩到正常的构建过程中。

我不知道你的意思是什么“在你的仓库中放置一套常量的库”?对于OpenWrap,您需要做的就是为项目维护“openwrap描述符”。该文件包含项目的所有直接依赖项(对版本号有或没有限制)。 (间接依赖关系是自动引入的)当你有一堆二进制dll开始时,你是否想知道如何开始?我可以告诉你我做了什么。基本上,我不使用任何NuGet包,我为一切创建了OpenWrap包。我还为所有二进制依赖项创建了OpenWrap包(其中一些是开源的)。这非常简单:在OpenWrap描述符中填写正确的依赖项,并指定包只能包含给定的dll。我们有一堆二进制依赖项,但是一旦你开始打包它们,它肯定没那么多工作。

如果您想查看示例,可以查看以下示例: http://code.google.com/p/ppwcode/source/browse/dotnet/External/Apache.Log4Net/trunk/Apache.Log4Net.wrapdesc

这就是打包二进制依赖项所需要做的全部工作。这是我创建的包,我们目前在我工作的公司使用它。我知道Log4Net可能是一个NuGet包,我可能会使用它。自己创建这些二进制包的好处是,我可以完全控制包,包的版本编号,一个大项目如何拆分几个较小的包等等。

作为OpenWrap存储库,您可以使用本地文件系统上的文件夹或网络共享上的文件夹。我们使用的实际上是一个webdav存储库,我们在驱动器上本地安装(使用Windows 7)。这对我们来说很好,也允许我们指定谁拥有对存储库的读写权限。

你提到单声道......好吧,这可能是个问题:当前发布的OpenWrap版本(2.0.2)不能在单声道AFAIK上运行。但好消息是Sebastien Lambla一直在努力让OpenWrap在mono + xbuild上运行,以便很快发布新版本:2.0.3。还没有可用的alpha / beta版本,但您可以使用git构建。 (在这种情况下,您需要构建openwrap-shell和openwrap)。创建OpenWrap的Sebastien Lambla通常会关注StackOverflow上的问题,并且可能会为您提供有关单声道状态的更完整答案。

顺便说一句,在我工作的地方,我们已经使用OpenWrap超过一年了。那时我们比较了NuGet和OpenWrap,当时OpenWrap远远超过了NuGet。基本上,对我而言,NuGet不是依赖管理的工具,而是一种帮助您在Visual Studio中从远程服务器获取二进制依赖关系的工具(意思是:将dll从远程服务器复制到本地文件夹并添加对本地dll的引用)项目文件)。与此同时,NuGet一直在追赶OpenWrap并增加了OpenWrap中已经存在的功能。在我看来,NuGet对OpenWrap只有2件事,那就是Visual Studio中的集成(也就是远程可用软件包的概述和点击式点击添加软件包)以及它由微软人员(AFAIK)维护的事实。 。这两件事都只是政治性的:通过漂亮的界面和微软的支持来说服人们更容易。但就个人而言,我认为OpenWrap在技术上是优越的,我认为真的很遗憾它没有得到应有的关注。