svn协同开发下的dll版本管理最佳实践

flyingaway flyingaway     2022-10-06     688

关键词:

 

    作为一名开发人员,常常碰到的一个问题是,当使用svn签出一份最新代码时,经常不能一次编译通过,导致花费大量时间去解决编译问题,这里碰到的问题一般可以分为三类:

1. 由于提交代码的开发人员失误,忘记提交本地更改的文件或少提交,特别是croj或sln项目和新添加的文件,因为新添加的文件在svn下默认是?状态的,这一点的话,只能靠开发人员自己细心解决;

2. 由于引用版本不一致,或版本更新,开发时俩个开发人员的编译调试,甚至本地测试都不会有问题,但是当需要发布测试版本或发布到生产环境时,就会发生版本冲突导致致命bug,也许这个bug还是一个隐形bug,很难发现或捕获;

第二点往往是致命的,因为在敏捷中,提倡的是尽早暴露问题并解决,那么有没有一种方法或措施去解决他,或规避这个问题呢?答案显然是肯定的,在这里,我介绍一下目前我接触到的俩种版本管理(或者第三方库的管理方案)。

 

第一种是使用TortoiseSVN提供的external特性,在这之前先介绍一下,我采取的svn目录结构,如下

--trunk  <--开发主干

      --build <--自动化构建脚本

     --documents <--文档

     --packages <--nuget包

    --references <--引用

    --releases <--release版本

    --src <--源码

    --test <--测试用例

   --XXXXX.sln <-- 解决方案

--branches  <--开发分支

--tags  <--发布版本

 我们假设A项目是框架的项目,B项目是业务代码,B项目需要引用框架项目的dll,那么,A项目编译完成后,在releases里发布一个1.0.0的版本(最好使用生成事件写XCOPY脚本,这样就不会忘记发版本,或手动去拷贝构建的版本),如下图

技术分享图片

那么,在B项目中,我们打开reference目录,右键,点击属性,打开属性窗体,按如下操作

技术分享图片

 

完成之后,在每次只要更新这个目录,就能及时得获取到最新的引用版本,在项目文件中对该dll进行引用,实际上引用的是相对目录,这样就解决了因为版本或路径不一致导致的问题,预防这些人为的操作,可以极大的节省我们的开发时间到实际需要解决的问题上,我们每次签出的版本也能保证可以构建成功,当然,如果你们项目规范的话,最好写上自动构建脚本,另外就是一定一定一定要使用神器(Jinkens),用上它,你们项目组真的能过上快乐和谐幸福的生活。

 

第二种方法,就是使用微软公开的Nuget工具,构建本地的nuget服务器,这种方式集成好一些,可以定义包对包的依赖,这样的依赖关系就不用使用者再去管理。废话不多说,先搭建nuget服务器,具体可以看 https://www.cnblogs.com/lzrabbit/archive/2012/05/01/2477873.html 这位博主介绍得比较详细。这里提及到的一点是,在版本升级时,比如开始使用的是某个包的1.0.0版本,后来升级到1.1.0版本,后来1.1.0自己重新上传了一遍,但是版本号没有变,需要删除packages包里对应的1.1.0的包,最好把本地缓存也清空一下,否则可能还是会拉去1.1.0的旧版本。操作方式是,打开VS,选择菜单工具->Nuget 包管理->程序包管理器设置->常规->清空所有Nuget缓存。

下载https://github.com/NuGetPackageExplorer/NuGetPackageExplorer客户端包管理器并安装。

1. 打开NuGet Package Explorer

2. 选择Create a new package

3. 左边是编辑一些属性等,右侧是添加包文件

4.填入基本信息,其中Id其实是Name,就是我们在nuget浏览器里看到的名称

5.在左侧点击Edit dependencies,可添加外部依赖,在下载使用时,会自动检测依赖包并下载

技术分享图片

6. 在右侧右键,选择菜单Add a  Lib Folder,在Lib上右键,选择Add .NET Folder来添加对应框架的版本,然后右键选择我们需要添加的文件即可

7.完成以下操作后,我们就可以点击最上面的File菜单,选择Publish,在弹出的窗体,配置刚才搭建的服务器地址PublishUrl,在下面需要填Publish Key,相当于一个密码,这个是在服务器里web.config里配置的,找到节点<add key="apiKey" value="XXXXXXX"/>,将这个value复制过来即可发布

 

完成以上操作后,我们就已经搭建完成了我们的本地nuget服务器了,如果已经在vs中配置好了本地nuget路径,那么我们就可以使用了。

 

以上主要是对dll发布和引用的管理介绍了我本人在项目中做的最佳实践,后面会专门写一篇文章介绍如何搭建Jinkens并使用Jinkens完成自动化构建和部署的(也可以做自动化测试)。

 

业务技术协同线上化的硬盘式研发管理实践

...临的挑战和困难,揭密了如何结合云效产品进行业务技术协同线上化的硬盘式研发管理实践。摘要:在云效平台策划推出的《持续集成与交付:阿里最佳实践》专题中,阿里云效产品专家代平为大家深入浅出地分享了互联网的研... 查看详情

项目版本管理的最佳实践:云效飞流flow篇

...云云效来讲解飞流Flow的最佳实践目录一、分支规约二、版本号规约2.1主版本号(首位版本号)2.2次版本号(迭代号)2.3小版本号三、云效飞流Flow的最佳实践(使用阿里云云效)3.1总体流程图3.2弓行同学与阿吉同学的最佳实践3.2.... 查看详情

使用 TeamCity 合并语义版本控制的最佳实践是啥

】使用TeamCity合并语义版本控制的最佳实践是啥【英文标题】:What\'stheBestPracticeforincorporateSemanticVersioningusingTeamCity使用TeamCity合并语义版本控制的最佳实践是什么【发布时间】:2012-09-1107:46:37【问题描述】:TeamCity是一个很棒的CI... 查看详情

svn分支/合并原理及最佳实践

...几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并的方法不甚... 查看详情

版本控制的介绍以及git和svn的区别

...份以便恢复以前的版本的软件工程技术。实现跨区域多人协同开发追踪和记载一个或者多个文件的历史记录组织和保护你的源代码和文档统计工作量并行开发、提高开发效率跟踪记录整个软件的开发过程减轻开发人员的负担,节... 查看详情

git协同开发

Git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何项目的版本问题。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。与cvs,svn等版本管理工具不同,GIT采用的是分布式版本库的方式... 查看详情

git-svn—让git和svn协同工作

 git-svn—让git和svn协同工作 svn作为一个优秀源码版本的管理工具,可以适合绝大多数项目。但是因为它的采用中心化管理,不可避免的存在本地代码的备份和版本管理问题。也就是说对于尚未或暂无法提交到Subversion服... 查看详情

svn分支/合并原理及最佳实践

...几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并的方法不甚... 查看详情

集成使用 svn、Jira 和 Bamboo 的任何最佳实践? [关闭]

...描述】:我目前专注于使用svn、Jira和Bamboo设置软件配置管理流程。不幸的是,我找不到使用上述工具的任何定义或标准做法。我正在寻找一组最佳实践,包括:最好的分支方式保持开发线 查看详情

什么是功能/错误发布的良好 SVN 最佳实践?

...用项目(复杂的部分,一些未知数):trunk是主要的稳定版本branches有错误发布,例如bug-503、bug-524,其中一些bug很复杂,涉 查看详情

实战flyway迁移指南最佳实践(代码片段)

...上线过程持续痛苦,代码有GIT/SVN来控制,数据库中的表版本也可以做到版本控制,本文讲解通过flyway的方式来管理数据库版本变动。本文首发个人技术博客:http://nullpointer.pw/flyway-best-practice.html项目痛点一个项 查看详情

建立和管理开源项目的最佳实践

】建立和管理开源项目的最佳实践【英文标题】:BestPracticesforSetupandManagementofanOpenSourceProject【发布时间】:2010-04-0216:23:03【问题描述】:今年晚些时候,我想发布一个我一直致力于开源的PHP框架。我确实使用源代码控制(SVN),但... 查看详情

如何通过svn进行协同设计

参考技术A产品开发当中,我们很多时候代码和部分文档都有svn或者git工具进行管理,但是原型文件其实也需要很好的管理,特别是2个人以上对同一个rp文件进行频繁修改,没有版本管理将非常痛苦,即使用svn或者git对整个rp文件... 查看详情

使用共享库版本支持不同 ABI 的最佳实践是啥?

】使用共享库版本支持不同ABI的最佳实践是啥?【英文标题】:WhatisthebestpracticeforsupportingdifferentABIswithasharedlibraryrelease?使用共享库版本支持不同ABI的最佳实践是什么?【发布时间】:2018-05-2003:42:55【问题描述】:我相信MS在MSVC... 查看详情

gitflow——git团队协作最佳实践

  规范的Git使用Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高。实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢失等。就... 查看详情

IntelliJ IDEA 9 + Maven + 版本控制的最佳实践

】IntelliJIDEA9+Maven+版本控制的最佳实践【英文标题】:BestpracticesforIntelliJIDEA9+Maven+Versioncontrol【发布时间】:2010-12-1122:26:42【问题描述】:该项目使用Maven,因此POM文件是项目信息的主要来源。项目文件中有一些有用的设置可以很... 查看详情

1.6git(代码片段)

版本控制器完成协同开发项目,帮助程序员整合代码软件:SVN、GITgit:集群化、多分支git简介什么是git:版本控制器-控制的对象是开发的项目代码代码开发时间轴:需求1>版本库1>需求2>版本库2>版本库1>版本库2协同开... 查看详情

版本控制系统之svn和git的区别

版本控制器的作用:1. 可以协同代码管理,让多人开发代码得以实现。2. 回归到以前的任何一个时间点的代码处(好比:开始写了很多代码,后面有修改了一些,突然IDE崩溃,但是发现还是以前的代码更好,这个时候无... 查看详情