如何在每个CI Build之后直接从NuGet提供新的DLL?

时间:2014-01-29 15:49:50

标签: asp.net build nuget nuget-package package-management

我希望这是一个已经回答的问题的愚蠢副本。

我有一个asp.net网站,它依赖于其他一些项目(dll复制到bin)。现在,我想要的是每次更新任何项目时,我都会在我的网站/ bin中获得最新的dll。我不希望我的CI服务器签入更新的dll。

我的项目已经有一个私有的NuGet提要,只是希望它在每次成功的CI构建之后提供最新的dll。现在,我的问题是

  1. 有没有办法直接提供dll,而不创建nupkg?并且可能从构建输出文件夹中选择它们? (由于某些原因,每天数百次创建包作为所有dll的后期构建任务并不方便)如果可能,那真棒!

  2. 如果没有,我们是否可以避免每次增加dll的版本号,仍然可以对新dll进行nuget更新?像基于最新发布日期或其他东西的更新? (有大量的dll,以及很多依赖)

  3. 有没有办法在不构建解决方案的情况下使用最新的dll?是的,我可以做一个nuget更新命令,但还有其他方法吗?

  4. 有人建议镜像我当前的代码库并使用MyGet或ProGet之类的东西。由于几个原因,目前这是不可行的。

1 个答案:

答案 0 :(得分:1)

在任何NuGet依赖项之后触发Visual Studio构建可能不是您真正需要的 - 这是CI的工作。但是,您可以在packages.config文件中设置版本范围,以使VS(通过nuget)在可用时拉出更新的NuGet包。

回答您的具体问题:

  1. 为什么你想要服务器'随机'松散的DLL,你的原点是你无法确定的? NuGet提供了一种机制来跟踪您自己的代码所依赖的代码的来源,这使得追踪错误更容易:)如果您依赖于包含每天更改“数百次”的DLL的NuGet包,那么您应该可能只是构建这些DLL直接与您的申请。

  2. 请参阅#1 - 如果您经常重新构建NuGet包,那么您的包边界可能会出错。考虑一下你的软件包是如何真正独立的,看看将一些DLL放在一起是否合理,甚至分离出(fork)多个独立应用程序之间共享的代码。如果您创建一个新版本的NuGet包,那么您应该增加版本号 - 这是语义版本控制的基本前提,如果您不遵循这种模式,您将陷入混乱。

  3. 要关闭最新的NuGet依赖项,nuget update是您的朋友:)

  4. 使用MyGet或ProGet 可能成为解决方案的一部分,但它与您上面提到的模式没有直接关系。