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

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

回到顶部

DS02、首先介绍以下两个DOS命令:
》attrib
  1. attrib指令的格式和常用参数为
  2. ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]
  3. + 设置属性。
  4. - 清除属性。
  5. R 只读文件属性。
  6. A 存档文件属性。
  7. S 系统文件属性。
  8. H 隐藏文件属性。
  9. I 无内容索引文件属性。
  10. [drive:][path][filename]
  11. 指定要处理的文件属性。
  12. /S 处理当前文件夹及其子文件夹中的匹配文件。
  13. /D 处理文件夹。
  14. /L 处理符号链接和符号链接目标的属性。

attrib命令的帮助文档:

基本功能:显示或更改文件属性。
常用用法:attrib -r 文件路径\文件名
举例说明:
我们在C盘根目录下面建了一个文件test.txt,其属性页如下:
此命令操作可以将其只读属性去掉:
PS:想要查看命令的帮助文档,命令为:命令名 /?
 
》xcopy
  1. C:\Users\shenjl>xcopy /?
  2. 复制文件和目录树。
  3. XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
  4. [/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
  5. [/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
  6. [/EXCLUDE:file1[+file2][+file3]...]
  7. source 指定要复制的文件。
  8. destination 指定新文件的位置和/或名称。
  9. /A 仅复制有存档属性集的文件,但不更改属性。
  10. /M 仅复制有存档属性集的文件,并关闭存档属性。
  11. /D:m-d-y 复制在指定日期或指定日期以后更改的文件。
  12. 如果没有提供日期,只复制那些源时间比目标时间新的文件。
  13. /EXCLUDE:file1[+file2][+file3]...
  14. 指定含有字符串的文件列表。每个字符串在文件中应位于单独的一行。
  15. 如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制
  16. 该文件。例如,指定如 \obj\ .obj 的字符串会分别排除目录
  17. obj 下面的所有文件或带有 .obj 扩展名的所有文件。
  18. /P 创建每个目标文件之前提示您。
  19. /S 复制目录和子目录,不包括空目录。
  20. /E 复制目录和子目录,包括空目录。与 /S /E 相同。可以用来修改 /T
  21. /V 验证每个新文件的大小。
  22. /W 提示您在复制前按键。
  23. /C 即使有错误,也继续复制。
  24. /I 如果目标不存在,且要复制多个文件,则假定目标必须是目录。
  25. /Q 复制时不显示文件名。
  26. /F 复制时显示完整的源文件名和目标文件名。
  27. /L 显示要复制的文件。
  28. /G 允许将加密文件复制到不支持加密的目标。
  29. /H 也复制隐藏文件和系统文件。
  30. /R 覆盖只读文件。
  31. /T 创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括
  32. 空目录和子目录。
  33. /U 只复制已经存在于目标中的文件。
  34. /K 复制属性。一般的 Xcopy 会重设只读属性。
  35. /N 用生成的短名称复制。
  36. /O 复制文件所有权和 ACL 信息。
  37. /X 复制文件审核设置(隐含 /O)。
  38. /Y 取消提示以确认要覆盖现有目标文件。
  39. /-Y 要提示以确认要覆盖现有目标文件。
  40. /Z 在可重新启动模式下复制网络文件。
  41. /B 复制符号链接本身与链接目标相对。
  42. /J 复制时不使用缓冲的 I/O。推荐复制大文件时使用。
  43.  
  44. 开关 /Y 可以预先在 COPYCMD 环境变量中设置。
  45. 这可能被命令行上的 /-Y 覆盖。

xcopy命令的帮助文档

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

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

举例说明:
xcopy -r -y test.txt ..\map\bin\
此命令可以将当前文件夹下面的test.txt文件复制到父级目录下面的map\bin\文件夹下面,如果有同名文件直接覆盖,并且不给出覆盖提示。
 
DS03、第一种实现方法(xcopy)
1、DOS命令:
xcopy /r /y $(TargetPath) $(SolutionDir)\map\Bin\
2、操作方法:
右键项目-属性-生成事件。在生成后事件命令行输入以上代码,如下图所示:
 
3、其中的各个参数的意义如下图所示:
 
4、解释如下:
$(TargetPath)和$(SolutionDir)是两个宏,分别代表程序集编译后生成的dll文件和解决方案的路径 。
即每次生成成功后,都会将\bin\Debug\目录里面的Mysoft.Selonsy.Services.dll文件拷贝到 解决方案路径\map\Bin\ 目录下面,并覆盖原有文件,且不给出覆盖提示。
 
 DS04、第二种实现方法(attrib)
 1、操作方法:
我们也可以直接在生成里面配置输出路径,如下图所示:
右键项目-属性-生成-输出路径,更改为要拷贝到的目的文件夹。如:..\map\Bin\ (即:上级目录的map\Bin\文件夹)。
注意:此时 map\Bin\ 文件夹下面就会有两个文件,一个.dll和一个.pdb文件。
 
2、当然仅仅是这样是不够的,因为上面的事件动作是先检查目的文件夹里面的内容,如果已经存在同名文件的话,将其删除,再把obj/Debug里面生成的dll拷贝到该文件夹里面。
那么这样就会出现异常,因为很多的项目都会设置部分重要文件夹为只读(比如说上面的 \Map\bin\ ),所以正常执行删除的时候会提示操作失败,如下图所示:
去只读的原因:拷贝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
 
 
 
 
 
 
 

多项目开发下的dll文件管理的更多相关文章

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

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

  2. ASP.NET项目中引用全局dll

    在ASP.NET项目中,有些dll是全局dll,也就是说,没有放在单个项目的引用中.它们一般存放在如下目录C:\Windows\assembly中 这个时候,我们需要在单个项目中引用他们,应该如何做呢 ...

  3. AFC项目开发文档整理

    AFC项目开发文档整理 PHPCMS 的确是一个伟大的CMS,我对它爱不释手. 标签嵌套无法loop获取的解决办法.关键代码如下: /\*后台添加\*/ $str = preg_replace ( & ...

  4. QM项目开发文档整理

    QM项目开发文档整理 前言 在W公司工作4个多月,庆幸接触到的全是"硬"项目,真枪实干,技术.经验.能力都得到了很大提升. QM项目 此项目WEB前端学到的东西很多,对PHP项目的 ...

  5. Visual Studio中的引用项目和直接引用DLL文件

    在VS中引用类库时有多种方法,其中用的最多的就是在引用时选择项目选项卡引用本解决方案下的类库项目和选择浏览选项卡直接引用类库DLL文件,实际上这两种引用方式略有不同,今天就为大家总结下. C#本地项目 ...

  6. Web项目使用Oracle.DataAccess.dll 类库连接oracle数据库

    首先我用的工具是oracle 32位免安装版+Oracle.DataAccess.dll 32位  文件版本4.121.1.0+vs2013 +win7 64位 Oracle.DataAccess.d ...

  7. .net项目引用C++ 动态链接库.dll

    项目开发时可能需要调用其动态链接库,如C++动态链接库,实现相应功能,那么在C#里怎么调用C++库里的方法呢,如下提供两种方式. 方式一:建立一个C++项目,选择dll动态链接库如下. //stdaf ...

  8. VS 项目(c#)引用了 DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称

    1. 在项目上点右键-->属性-->应用程序-->目标框架-->修改为.NET Framework 4. 而我原来的设置是.NET Framework 4 Client Pro ...

  9. ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

    目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...

随机推荐

  1. EF的性能改善和思考

    EF是个工具,用的好了性能就会很好,用的不好性能就会有很大损失. 先从EF的设计思想来讲解 EF的初衷是根据缓存中的实体对象,以及实体对象的状态(删除.更新.添加)来对数据库进行操作,这些实体对象.以 ...

  2. jquery 获取元素背景图片backgroungImage的url

    $("#").css("backgroundImage").replace('url(','').replace(')','');

  3. mysql 自动备份和nginx自动安装脚本

    一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...

  4. PHPStorm 与 XDebug 配置

    XDebug 配置 环境 Nginx 1.4.7 32 bit PHP 5.4.25 32 bit Windows 10 64 bit 下载 PHP 5.4 VC9 (32 bit)[nts版本] 配 ...

  5. 让我们来简单说说mockjs吧!

    背景: 新接手了一个更新CRM的客户管理项目,负责添加三张活动财务表与操作的模块,接到任务时候,后台还没有做数据,所以用到了假数据,So就是这里所说的mockjs. 介绍: mockjs让前端独立于后 ...

  6. 如何获得APP内部资源

    安装一个iTools(百度一下就有) 用USB连接设备,打开iTools

  7. TLD目标跟踪算法

    1. 简介 TLD目标跟踪算法是Tracking-Learning-Detection算法的简称.这个视频跟踪算法框架由英国萨里大学的一个捷克籍博士生Zdenek Kalal提出.TLD将传统的视频跟 ...

  8. phpstorm 设置Utf8编码

    点击file 再点击setting 找到file Encoding gbk改成utf-8就ok了

  9. winform异步系统升级—BackgroundWorker

    BackgroundWorker用法实例 自己的代码,就是要执行的代码写到dowork里,ProgressChanged事件是控制进度时用的,最后的Completed事件进度完成,也就是dowork里 ...

  10. winform右下角弹窗

    网页是否经常在电脑右下角弹窗显示消息?其实Winform也是可以实现的.下面介绍两种方法. 第一步:设计窗体 第二步:实现代码 第一种方法 引用user32 声明常量 窗体Load事件 窗体FormC ...