C# 正在查找msbuild和xbuild任务以获取引用的库(不带nuget.exe)

C# 正在查找msbuild和xbuild任务以获取引用的库(不带nuget.exe),c#,nuget,openwrap,C#,Nuget,Openwrap,我有一个问题,创建一个简单的解决方案为我的构建系统,基于单声道 目前的情况是,我将引用的库保存在git存储库中,这是不好的,原因很明显 我想要实现的是NuGet提供的功能——从Web自动下载DLL,将它们放在某个目录中,然后忘记它们 我希望在构建时执行此操作,这样就不需要对下载库等执行任何其他操作。最好的选择是msbuild(mono上的xbuild)任务,但我希望它是独立于系统的,因此,不必考虑流行的一个,即执行NuGet.exe(考虑并行mono安装等) 我试过Pepita项目,但是。。。错

我有一个问题,创建一个简单的解决方案为我的构建系统,基于单声道

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

我想要实现的是NuGet提供的功能——从Web自动下载DLL,将它们放在某个目录中,然后忘记它们

我希望在构建时执行此操作,这样就不需要对下载库等执行任何其他操作。最好的选择是msbuild(mono上的xbuild)任务,但我希望它是独立于系统的,因此,不必考虑流行的一个,即执行NuGet.exe(考虑并行mono安装等)

我试过Pepita项目,但是。。。错。不,真的,它是,它有太多的设计错误,很难使用或修复。要进行适当的配置,需要对整个项目进行认真的重写

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

更好的是,如果这样一个库能够解析依赖项而不在packages.config(或类似)文件中显式指定它们,那就更好了,例如,如果我想在配置文件中包含Castle.Windsor,我就不想在配置文件中包含Castle.Core


我知道OpenWrap项目(使用NuGet Gallery),它看起来很有希望,但我找不到解决方案,我只需在我的repo中放置一组常量库,修改csproj文件,进行一些配置,然后完成它。

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

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

如果要查看示例,可以选中此示例:

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

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

你提到mono。。。。这可能是个问题:目前发布的OpenWrap版本(2.0.2)没有在mono AFAIK上运行。但好消息是,塞巴斯蒂安·兰布拉一直在努力让OpenWrap在即将发布的新版本mono+xbuild上运行:2.0.3。目前还没有可用的alpha/beta版本,但您可以从git进行构建。(在这种情况下,您需要同时构建openwrap shell和openwrap)。创建OpenWrap的塞巴斯蒂安·兰布拉(Sebastien Lambla)通常会关注有关StackOverflow的问题,并可能会为您提供有关mono状态的更完整答案


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

澄清:OpenWrap 2.0.2在Linux上的mono上不起作用,但我不知道Windows上的mono的状态如何。我认为在谈到恒定的库集时,这意味着OpenWrap库(xbuild任务和所需库)将是i