多项目开发下的dll文件管理

阅读目录:
  • DS01:为什么要对生成的dll文件进行管理?
  • DS02:首先介绍以下两个DOS命令
  • DS03:第一种实现方法(xcopy)
  • DS04:第二种实现方法(attrib)
  • DS05:分享一个有意思的东西
  • DS06:您可能需要了解的其他知识
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:\Users\shenjl>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 ..\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
 
 
 
 
 
 
 

 

转载于:https://www.cnblogs.com/selonsy/p/dll-build.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自然连接(NATURAL JOIN)

自然连接(NATURAL JOIN)是一种特殊的等价连接,它将表中具有相同名称的列自动进行记录匹配。自然连接不必指定任何同等连接条件。图9.9给出了典型的自然连接示意图。 图9.9 自然连接 自然连接自动判断相同名称的列,而后形成匹配。…

自连接

9.3 表的连接类型 9.3.1 自连接 自连接是指表与其自身进行连接,这就需要用到前面介绍的表别名。下面通过一个具体实例来讲解自连接的应用。 实例5 自连接的使用方法 查询成绩中存在不及格课程的学生的姓名、所在系、所有的课程及成绩信息。如果采用前面介绍的…

LIKE运算符

6.5 使用LIKE进行模糊查询 当只知道部分字符串时,可使用LIKE运算符来查询数据库,找出与其相关的整个字符串。因此,当把关键字LIKE用在WHERE子句中时,可以比较两个字符串的部分匹配。当对字符串内容有些印象,但并不知…

AND运算符

6.2 组合查询条件 在前一章提到的WHERE子句进行查询时,WHERE子句后面的搜索条件只是单一的。实际上,可以通过布尔运算符AND和OR,将多个单独的搜索条件结合在一个WHERE子句中,形成一个复合的搜索条件。当对复合搜索条件求值时&a…

OR运算符

6.2.2 OR运算符 OR运算符表示“或”的关系。当可能有多个条件为True,但只要有一个为True就满足搜索要求时,可以使用OR运算符来组合搜索条件。OR在结合两个布尔表达式时,只要其中一个条件为True时,便传回True。OR运算符的真值表…

Java基础---网络编程

第一讲 概述 1、网络模型:OSI参考模型和TCP/IP参考模型 图示: 一般来说开发处于传输层和网际层,应用层为:FTP和HTTP协议等,传输层为:UDP和TCP等,网际层为:IP。 通常用户操作的是…

AND、OR运算符的组合使用

6.2.3 AND、OR运算符的组合使用 在WHERE子句中,通过AND、OR运算符可以同时连接多个条件,当然AND、OR运算符也可以同时使用。但是当AND、OR运算符同时存在时,其优先级如何确定呢?与大多数语言一样,SQL语言认为AND运算…

IN运算符的使用

6.3 IN运算符 在查询中,有时只要满足多个条件中的一个条件即可,如查询地址在北京、上海或者重庆的学生信息,这时候可以使用IN运算符。 6.3.1 IN运算符的使用 IN运算符允许根据一行记录中,是否有一列包括在一系列值之中&#…

NOT运算符与运算符

6.4.2 NOT运算符与<>运算符 对于简单的条件查询&#xff0c;NOT运算符与<>运算符的功能几乎没有什么区别&#xff0c;那么NOT运算符的优势体现在哪里呢&#xff1f;答案是它可以与其他运算符组合使用&#xff0c;这一点是<>运算符所不能实现的。在6.4.1节已…

“%”通配符

6.5.2 “%”通配符 在SQL语言中最常用的通配符可能就是“%”了&#xff0c;它表示任意字符的匹配&#xff0c;且不计字符的多少。下面通过几个典型实例来说明“%”通配符的使用。 1&#xff0e;开头&#xff0f;结尾匹配 从COURSE表中查询所有以“计算机”开头的所有课程的…

Wireshark基本介绍和学习TCP三次握手

Wireshark基本介绍和学习TCP三次握手 原文&#xff1a;http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html wireshark介绍 wireshark的官方下载网站&#xff1a; http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件&#xff0c;功能十分强大。可…

“_”通配符

6.5.3 “_”通配符 “_”通配符的功能与“%”通配符基本相同&#xff0c;只是它只表示任意一个字符的匹配。当然&#xff0c;要表示两个字符的匹配&#xff0c;就需要使用两个“_”通配符&#xff0c;即写成“__”。 只有在用户确定所要查询的字符串的个数&#xff0c;只是不…

“[]”通配符

6.5.4 “[]”通配符 “[]”通配符用于指定一系列的字符&#xff0c;只要满足这些字符其中之一&#xff0c;且位置出现在“[]”通配符的位置的字符串就满足查询条件。 当然&#xff0c;各种通配符也可以组合使用。组合使用各种通配符时&#xff0c;一定要弄清其表示的匹配条…

QT分页控件,开源,供大家使用

下载地址&#xff1a;http://files.cnblogs.com/dragonsuc/qt5.rar 转载于:https://www.cnblogs.com/dragonsuc/p/4242342.html

STL学习小结

STL就是Standard Template Library&#xff0c;标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说&#xff0c;STL是一些“容器”的集合&#xff0c;这些“容器”有list, vector,set,map等&#xff0c;STL也是算法和其它一些组件的集合。这里的“容器…

内连接(INNER JOIN)

9.3.3 内连接&#xff08;INNER JOIN&#xff09; 内连接也称为等同连接&#xff0c;返回的结果集是两个表中所有相匹配的数据&#xff0c;而舍弃不匹配的数据。也就是说&#xff0c;在这种查询中&#xff0c;DBMS只返回来自源表中的相关的行&#xff0c;即查询的结果表包含的…

外连接(OUTER JOIN)

9.3.4 外连接&#xff08;OUTER JOIN&#xff09; 不管是内连接还是带WHERE子句的多表查询&#xff0c;都组合自多个表&#xff0c;并生成结果表。换句话说&#xff0c;如果任何一个源表中的行在另一个源表中没有匹配&#xff0c;DBMS将不把该行放在最后的结果表中。 而外连…

Android应用切换皮肤功能实现

原文地址&#xff1a;http://www.eoeandroid.com/thread-318159-1-1.html 现在大多数android应用都支持切换皮肤的功能。比如千千静听&#xff0c;墨迹天气等等。本文介绍两种切换皮肤的方法。1.第一种是通过安装皮肤apk的方式。当安装了皮肤apk包之后&#xff0c;主程序只需要…

交叉连接(CROSS JOIN)

9.3.5 交叉连接&#xff08;CROSS JOIN&#xff09; 除了在FROM子句中使用逗号间隔连接的表外&#xff0c;SQL还支持另一种被称为交叉连接的操作&#xff0c;它们都返回被连接的两个表所有数据行的笛卡尔积&#xff0c;返回到的数据行数等于第一个表中符合查询条件的数据行数…

UNION运算符

9.4.2 UNION运算符 在SQL中&#xff0c;UNION运算符用于执行集合并的运算。关于UNION运算符的使用&#xff0c;这里通过实例来说明。 实例16 使用UNION运算符执行集合并的运算 在STUDENT表中&#xff0c;查询选修了1号或者10号课程的学生的学号、姓名、所在系信息。实例代…