Automation nuget是否适合日常开发工作流程?
我正在研究nuget,以改进开发过程中对依赖项(包括内部依赖项和第三方依赖项)的自动处理 只要通过CI构建服务器进行开发,一切都很好: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,它将在构建时自动下
注意,我有本地项目,虽然除了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多个单独的项目集中在一个应用程序可执行文件中,预计会发生冲突)