Automation nuget是否适合日常开发工作流程?

Automation nuget是否适合日常开发工作流程?,automation,continuous-integration,nuget,nuget-package-restore,Automation,Continuous Integration,Nuget,Nuget Package Restore,我正在研究nuget,以改进开发过程中对依赖项(包括内部依赖项和第三方依赖项)的自动处理 只要通过CI构建服务器进行开发,一切都很好: 获取A和B的最新来源,其中B依赖于A 修复程序中的错误 建造一个 检查源代码管理 CI生成服务器已启动 新的nuget包已创建并放置在公司存储库中 构建B(将获得更新的A包) 运行B以验证A中的错误是否已修复 N重复n次 但是,我想知道是否可以作为单个开发人员在本地工作,而不必等待CI构建服务器生成新的包 Nuget有一个功能包Restore,它将在构建时自动下

我正在研究nuget,以改进开发过程中对依赖项(包括内部依赖项和第三方依赖项)的自动处理

只要通过CI构建服务器进行开发,一切都很好:

  • 获取A和B的最新来源,其中B依赖于A
  • 修复程序中的错误
  • 建造一个
  • 检查源代码管理
  • CI生成服务器已启动
  • 新的nuget包已创建并放置在公司存储库中
  • 构建B(将获得更新的A包)
  • 运行B以验证A中的错误是否已修复 N重复n次
  • 但是,我想知道是否可以作为单个开发人员在本地工作,而不必等待CI构建服务器生成新的包

    Nuget有一个功能包Restore,它将在构建时自动下载所有依赖项。您还可以列出包还原应查找包的存储库顺序

    如果工作流可以变成:

  • 获取A和B的最新来源,其中B依赖于A
  • 修复程序中的错误
  • 建造一个
  • (建筑创建本地nuget包)
  • 运行B测试A中的(已解决的)bug(现在应该使用我们的本地nuget包,而不是本地存储库)
  • …重复n次
  • 检查源代码管理
  • CI生成服务器已启动
  • 在公司存储库中创建的新nuget包
  • 使用Visual Studio、MSBuild、CI生成服务器和nuget是否可以实现这一点?我特别感兴趣的是在本地开发的同时制作本地包


    注意,我有本地项目,虽然除了NuGuT包POST Bug的生成之外,这将是一个希望同时为C和C++项目工作的工作流。在我们的解决方案中,NuGet将库停在解决方案层次结构的“packages”目录中,该目录最终保存在TFS中。这允许完整的解决方案签出,包括所需的库。如果您打算更新通常由NuGet提供的库,则需要更新依赖项目的引用,以指向包含通常由NuGet进程提供的更新代码的项目


    在签入常规解决方案工作(而不是与NuGet相关的LIB)之前,请确保解决方案的NuGet LIB是最新的,并且解决方案中的引用指向NuGet安装的LIB。当然,您将提前签入并获取与NuGet相关的lib。

    我现在的解决方案虽然远不理想,但却是我认为最有效的解决方案。哦这是一项正在进行的工作,因此在未来几周/几个月内,当我找到解决问题的方法时,它将发生变化

    我现在必须处理托管DLL,但我确实有一些本机代码和最糟糕的多平台本机代码需要最终处理

    创建一个本地存储库,基本上只是一个文件夹,并在nuget提要列表中配置它

    然后我创建了一个任务(MSBuild),它将打包项目并将其输出到本地存储库的根文件夹中。确保软件包的版本始终在增加。目前,我通过编辑程序集版本手动执行此操作

    一旦构建,更新引用它的其他项目,我通常通过包管理器控制台(更新包)来完成

    每一个更新过的项目,都会升级版本,然后重复,直到你的项目(实际的程序)达到最高水平

    一旦一切都很好,并且您已经准备好提交,那么构建系统应该自行打包并将其发送到您的官方存储库

    好的

    • 没有阻塞存储库和使用中间开发版本构建系统,垃圾仍然(应该)是本地的
    • 本地回购非常容易设置,甚至可以通过全局nuget配置在不更改VS的情况下完成
    • 这对包恢复或在项目中签入包的两种范例都是友好的。也就是说,我建议不要签入本地构建的包,而是签入通过构建系统提交到本地存储库的包。本地建造的东西应该保持本地
    坏的

    • 仍然比仅仅向解决方案中添加项目复杂得多
    • 你的依赖树越深(或越宽),痛苦就越大
    丑陋的人

    • 使一些土生土长的裸体行为变得非常古怪和恼人:
      • 如果您的VS连接到一个版本系统(perforce for me),则更新操作将永远持续。我听说他们“解决”了这个问题,如果现在是最糟糕的情况,他们会讨厌看到以前的情况
      • 让nuget将非代码引用更改回从不复制是一个很大的痛苦
    如果只有

    • 直接从nuspec配置内容依赖项的所需状态(始终复制、从不复制或更新),然后使用它完成!(oh和具有ClickOnce内容状态的相同故事包括、排除等)
    • 快速更新操作,12个项目2分钟简直是疯了,特别是如果最终目标是管理500+的话
    • 也许是一种混合模式,我们在本地处理包含的项目,但构建系统将处理nuget依赖项(并在必要时构建它们)
    • 如果要解析项目,请遵循MSBuild解析规则并遵守条件语句。 还有一些问题我还没有弄清楚,比如如何管理存储库中代码的多个分支。如何进一步处理食物链上的版本冲突。在一个大型项目中(最终我们必须将500多个单独的项目集中在一个应用程序可执行文件中,预计会发生冲突)
    我很想把理智依赖管理的所有优点都带到Maven身上,但到目前为止我还没有找到