zoukankan      html  css  js  c++  java
  • svn协同开发下的dll版本管理最佳实践

        作为一名开发人员,常常碰到的一个问题是,当使用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完成自动化构建和部署的(也可以做自动化测试)。

  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/flyingaway/p/8081245.html
Copyright © 2011-2022 走看看