zoukankan      html  css  js  c++  java
  • 多项目开发下的dll文件管理

    阅读目录:
    DS01、为什么要对生成的dll文件进行管理?

    有时候,我们需要将编译后的文件和dll拷贝到一个集中的地方,这一点对于多项目开发来讲很有帮助。

    回到顶部

    DS02、首先介绍以下两个DOS命令:
    》attrib
    attrib指令的格式和常用参数为
    ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]
    + 设置属性。
    - 清除属性。
    R 只读文件属性。
    A 存档文件属性。
    S 系统文件属性。
    H 隐藏文件属性。
    I 无内容索引文件属性。
    [drive:][path][filename]
    指定要处理的文件属性。
    /S 处理当前文件夹及其子文件夹中的匹配文件。
    /D 处理文件夹。
    /L 处理符号链接和符号链接目标的属性。
    attrib命令的帮助文档
    基本功能:显示或更改文件属性
    常用用法:attrib -r 文件路径文件名
    举例说明:
    我们在C盘根目录下面建了一个文件test.txt,其属性页如下:
    此命令操作可以将其只读属性去掉:
    PS:想要查看命令的帮助文档,命令为:命令名 /?
     
    》xcopy
    C:Usersshenjl>xcopy /?
    复制文件和目录树。
    XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
                               [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
                               [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
                               [/EXCLUDE:file1[+file2][+file3]...]
      source       指定要复制的文件。
      destination  指定新文件的位置和/或名称。
      /A           仅复制有存档属性集的文件,但不更改属性。
      /M           仅复制有存档属性集的文件,并关闭存档属性。
      /D:m-d-y     复制在指定日期或指定日期以后更改的文件。
                   如果没有提供日期,只复制那些源时间比目标时间新的文件。
      /EXCLUDE:file1[+file2][+file3]...
                   指定含有字符串的文件列表。每个字符串在文件中应位于单独的一行。
                   如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制
                   该文件。例如,指定如 obj 或 .obj 的字符串会分别排除目录
                   obj 下面的所有文件或带有 .obj 扩展名的所有文件。
      /P           创建每个目标文件之前提示您。
      /S           复制目录和子目录,不包括空目录。
      /E           复制目录和子目录,包括空目录。与 /S /E 相同。可以用来修改 /T。
      /V           验证每个新文件的大小。
      /W           提示您在复制前按键。
      /C           即使有错误,也继续复制。
      /I           如果目标不存在,且要复制多个文件,则假定目标必须是目录。
      /Q           复制时不显示文件名。
      /F           复制时显示完整的源文件名和目标文件名。
      /L           显示要复制的文件。
      /G           允许将加密文件复制到不支持加密的目标。
      /H           也复制隐藏文件和系统文件。
      /R           覆盖只读文件。
      /T           创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括
                   空目录和子目录。
      /U           只复制已经存在于目标中的文件。
      /K           复制属性。一般的 Xcopy 会重设只读属性。
      /N           用生成的短名称复制。
      /O           复制文件所有权和 ACL 信息。
      /X           复制文件审核设置(隐含 /O)。
      /Y           取消提示以确认要覆盖现有目标文件。
      /-Y          要提示以确认要覆盖现有目标文件。
      /Z           在可重新启动模式下复制网络文件。
      /B           复制符号链接本身与链接目标相对。
      /J           复制时不使用缓冲的 I/O。推荐复制大文件时使用。
    
    开关 /Y 可以预先在 COPYCMD 环境变量中设置。
    这可能被命令行上的 /-Y 覆盖。
    xcopy命令的帮助文档

    基本功能:复制文件和目录树。

    常用用法:xcopy -r -y 原始文件夹文件名 目标文件夹

    举例说明:
    xcopy -r -y test.txt ..mapin
    此命令可以将当前文件夹下面的test.txt文件复制到父级目录下面的mapin文件夹下面,如果有同名文件直接覆盖,并且不给出覆盖提示。
     
    DS03、第一种实现方法(xcopy)
    1、DOS命令:
    xcopy /r /y $(TargetPath) $(SolutionDir)mapBin
    2、操作方法:
    右键项目-属性-生成事件。在生成后事件命令行输入以上代码,如下图所示:
     
    3、其中的各个参数的意义如下图所示:
     
    4、解释如下:
    $(TargetPath)$(SolutionDir)是两个宏,分别代表程序集编译后生成的dll文件解决方案的路径
    即每次生成成功后,都会将inDebug目录里面的Mysoft.Selonsy.Services.dll文件拷贝到 解决方案路径mapBin 目录下面,并覆盖原有文件,且不给出覆盖提示。
     
     DS04、第二种实现方法(attrib)
     1、操作方法:
    我们也可以直接在生成里面配置输出路径,如下图所示:
    右键项目-属性-生成-输出路径,更改为要拷贝到的目的文件夹。如:..mapBin (即:上级目录的mapBin文件夹)。
    注意:此时 mapBin 文件夹下面就会有两个文件,一个.dll和一个.pdb文件。
     
    2、当然仅仅是这样是不够的,因为上面的事件动作是先检查目的文件夹里面的内容,如果已经存在同名文件的话,将其删除,再把obj/Debug里面生成的dll拷贝到该文件夹里面
    那么这样就会出现异常,因为很多的项目都会设置部分重要文件夹为只读(比如说上面的 Mapin ),所以正常执行删除的时候会提示操作失败,如下图所示:
    去只读的原因:拷贝dll文件需要将以前的老的先删除掉,再将新生成的dll文件拷贝过去,如果原dll文件只读,那么就会删除失败,拷贝也就失败了。
    注意:从上面错误提示的第三句话可以看出,他是将obj/Debug下面的dll复制过去的。
    当然,那些不设置为只读的项目文件夹及文件就没有这个问题了,
    下面仅对设置了只读属性的情况进行讨论。
     
    3、编写预先生成事件命令行,对目标文件夹里面的已存在的dll文件和pdb文件进行去只读操作。
    首先我们在解决方案文件夹下面新建一个BeforeBuild.bat批处理文件,其内容如下:
    功能:去除指定目录里面后缀为.dll和.pdb文件的只读属性。
    放置的路径如下:
     
    4、在预先生成事件命令行里面调用此批处理文件
    命令为:call $(SolutionDir)BeforeBuild.bat
    解释:调用并执行解决方案路径下面的BeforeBuild.bat 文件,这样在生成事件之前会先将目标文件夹里面的.dll文件和.pdb文件去只读,
    然后在执行删除复制操作,这样就不会报错了。
     

    DS05:分享一个有意思的东西

    1、背景

    如果你的开发任务中存在多个项目(这里指的是很多很多哦),那么每次编译的时候就会花很长的时间,

    如果可以让编译结束之后给出弹窗提示,那么我们就可以在等待的这段时间里做点其他有意思的事情了,有没有很心动啊?

    2、操作方法

    我们在最后一个项目后期生成事件命令中调用以下的批处理文件:

    命令:call $(SolutionDir)AfterBuild.bat

    3、解释如下

    输出一段话 msgbox "项目已全部编译完成!"  到myTip.vbs文件中去(注意:没有的话会新建一个)。

    然后执行这个新生成的vbs(visual basic script)文件,弹出提示框。

    最后再删除此文件。

    那么,当最后一个项目编译完成之后,就会弹出如下的弹窗提示我们继续coding了。

    有没有很赞啊,其实有时候中间等待的时间都够我玩一把俄罗斯方块了,说多了都是泪。。。

    回到顶部

    DS06、需要了解的其他知识
    1、编译的步骤简介
    》新建一个项目的话,bin文件夹里面是空的,obj/Debug文件夹里面的TempPE里面也是空的,但是obj/Debug本身不是空的。
    》当点击生成项目的时候,bin文件夹中出现了两个文件,一个.dll文件和一个同名的.pdb文件。
       obj/Debug文件夹里面也有一个.dll文件和一个同名的.pdb文件,与bin文件相同。
       但是另外还有一个.csprojResolveAssemblyReference.cache文件。
    PS:所有编译才新生成的文件,都在.csproj.FileListAbsolute.txt文件里面有提示。
     
    2、运行后期生成事件
     
    3、vs编译过程中常见的宏
    可以使用以下任意宏来指定文件位置,或在存在多重选择的情况下获取输入文件的实际名称,这些宏不区分大小写
    说明

    $(ConfigurationName)

    当前项目配置的名称(例如,“Debug|Any CPU”)。

    $(OutDir)

    输出文件目录的路径,相对于项目目录。这解析为“输出目录”属性的值。它包括尾部的反斜杠“”。

    $(DevEnvDir)

    Visual Studio 2005 的安装目录(定义为驱动器 + 路径);包括尾部的反斜杠“”。

    $(PlatformName)

    当前目标平台的名称。例如“AnyCPU”。

    $(ProjectDir)

    项目的目录(定义为驱动器 + 路径);包括尾部的反斜杠“”。

    $(ProjectPath)

    项目的绝对路径名(定义为驱动器 + 路径 + 基本名称 + 文件扩展名)。

    $(ProjectName)

    项目的基本名称。

    $(ProjectFileName)

    项目的文件名(定义为基本名称 + 文件扩展名)。

    $(ProjectExt)

    项目的文件扩展名。它在文件扩展名的前面包括“.”。

    $(SolutionDir)

    解决方案的目录(定义为驱动器 + 路径);包括尾部的反斜杠“”。

    $(SolutionPath)

    解决方案的绝对路径名(定义为驱动器 + 路径 + 基本名称 + 文件扩展名)。

    $(SolutionName)

    解决方案的基本名称。

    $(SolutionFileName)

    解决方案的文件名(定义为基本名称 + 文件扩展名)。

    $(SolutionExt)

    解决方案的文件扩展名。它在文件扩展名的前面包括“.”。

    $(TargetDir)

    生成的主输出文件的目录(定义为驱动器 + 路径)。它包括尾部的反斜杠“”。

    $(TargetPath)

    生成的主输出文件的绝对路径名(定义为驱动器 + 路径 + 基本名称 + 文件扩展名)。

    $(TargetName)

    生成的主输出文件的基本名称。

    $(TargetFileName)

    生成的主输出文件的文件名(定义为基本名称 + 文件扩展名)。

    $(TargetExt)

    生成的主输出文件的文件扩展名。它在文件扩展名的前面包括“.”。

     

     
    2015年1月4日16:45:51
     
     
     
     
     
     
     

     

  • 相关阅读:
    34.页面刷新 Walker
    32.标题栏图标 Walker
    44.相对路径 Walker
    白乔原创:实战软件DIY
    白乔原创:VC之美化界面篇
    白乔原创:在公司里,你会是什么样的程序员?
    白乔原创:程序员的路该怎么走?
    白乔原创:VC之控件篇
    08年5月份培训的照片一张
    关于resin的认证框架
  • 原文地址:https://www.cnblogs.com/selonsy/p/dll-build.html
Copyright © 2011-2022 走看看