当项目比较庞大时候Dll文件的管理显得就尤其重要了,比如多个解决方案有不同项目之间的引用,如果引用的路径都指向某项目bin下的dll文件的话,dll维护起来很不方面,因此遇到这种情况的话该怎么更好的管理这些DLL文件呢?最近进行中移动项目就属于这种情况,项目中有三个解决方案,每个解决方案下有多个项目,并且每个解决方案的不同项目又有引用。而且又引用了外部的一些Com组件,当一个项目代码发生变化时候,其他项目引用该dll文件是否已经更新是经常需要考虑的问题,而且这样当出现bug时候也很难确定是否是DLL版本更新问题。另外不但这样的DLL文件管理很麻烦,而且很可能导致dll文件版本不正确引起莫名奇妙的问题。
目前这个项目进行到了最后阶段,对这个项目进行了重构,所以对项目的DLL文件的管理进行了整理,整理过程中有一些新的体会和朋友们分享。而且也学习了关于Post-build event command line事件即(生成后事件)的用法,感觉用Post-build event command line不失为管理DLL一种方法。个人感觉这种方法比较实用,先分享出来供朋友们参考,希望朋友们能提出宝贵的意见。
总述:当多个解决方案互相有引用DLL关系时,可以统一建立一个ReferenceLib文件夹,所有项目引用外来的DLL(非本解决方案)都引用该ReferenceLib文件夹下的,里面存放所有已经编译好的其他解决方案的DLL,一旦引用外部的DLL,那么在项目中引用的地方将显示路径,而在同一个解决方案下的不同项目将直接引用项目即可。
现在的问题就是当项目下有更新时候,如果把更新的dll文件从项目下拷贝到专门用于dll文件管理的ReferenceLib文件夹下呢?也就是说当项目编译的时候就执行拷贝操作,这样就用到了上面说到的Post-build event command line编译生成后事件。
在编译某工程时将DLL拷贝到指定的文件夹下,便于及时引用新的DLL。在Build Events----->post build event command line中写命令
语法是:copy "路径1" "路径2"
注:路径1代表要从哪儿拷贝的路径,即相当于"From"
路径2代表文件拷贝到哪儿去,即相当于"To"
下面是一些例子用法理解这种语法格式
copy "$(SolutionDir)configuration\*.xml" "C:\CharlesChen"
copy "$(SolutionDir)configuration\*.configuration" "C:\CharlesChen"
copy "$(SolutionDir)configuration\*.config" "C:\CharlesChen"
copy "$(SolutionDir)configuration\Icon\*.config" "C:\CharlesChen"
copy "$(SolutionDir).."reference\database.config" "C:\CharlesChen"
copy "$(SolutionDir).."reference\Images\open.gif" "C:\CharlesChen"
注意:
1.$(SolutionDir) 表示该解决方案, "$(SolutionDir)configuration " 该解决方案下有文件configuration.
2."*.xml" 表该文件下后缀为"xml"的文件.
3."$(SolutionDir)..\reference\" 表示和该解决方案同级有文件 reference.
Copy "$(ProjectDir)bin\Debug\*.*" "$(ProjectDir)..\References" 即把当前项目目录下的Bin\Debug文件夹下的所有文件拷贝到和当前项目同级的References文件夹下
上面用到了"$(SolutionDir)"这种表示路径的方式,这是VS能自动识别的。当然不只是这一个,通过查看MSDN还有其他预定义的路径表示方法:具体可参见MSDN,这里我把它复制下来:
具体可参见MSDN:http://msdn.microsoft.com/zh-cn/library/42x5kfw4(VS.80).aspx
宏 说明
$(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)
生成的主输出文件的文件扩展名。它在文件扩展名的前面包括“.”。
<script type="text/javascript">
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 33180;
var cb_entryId = 1297551;
var cb_blogApp = "Charles2008";
var cb_blogUserGuid = "908d3d0b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2008/9/24 11:38:00';
</script>
分享到:
相关推荐
当我们的程序需要引用多个dll,太多的dll引起混乱时,我们是不是可以将dll分类在不同的目录呢?如何引用不同文件夹的Dll文件,将是我们的问题?
应用场景:当发布的程序有引用其它dll, 又只想发布一个exe时就需要把dll打包到exe; 方法如下: 1、 项目右键选择“属性”; 2、 添加资源文件:在属性设置界面选择“资源”选项卡,点击“添加现有文件”,选择需...
本文介绍了让.NET程序兼容不同版本的Dll文件的方法:把所有的新版DLL文件拷贝到运行目录下,希望主程序能够直接调用新版的库文件。只要在config里面加入runtime节点就可以完成主程序一调用。
libcurl.dll等DLL文件详细解决方案 iutils.dll等DLL文件详细解决方案
最近在学习如何用IDA 反汇编DLL文件,由于是初步接触,水平有限,错误在所难免,不过如果能对像我同样的初学者有点帮助,那就倍感欣慰。由于是原创,收取点资源分安慰自己吧,哈哈,大家不要砖头之哦
java项目jar包转dll文件.net引用,jdk版本是1.7,ikvm是1.7.。。。已测试成功,
安装PS2019缺失D3DCOMPILER_47.dll文件解决方案与D3DCOMPILER_47.dll文件
C# 调用DLL文件C# 调用DLL文件C# 调用DLL文件C# 调用DLL文件C# 调用DLL文件C# 调用DLL文件C# 调用DLL文件
matlab生成dll方法的心得体会
[069]VC++多串口控制解决方案(DLL) 工业控制--串口通讯方法(WINAPI实现).zi上位机开发VC串口学习资料源p[069]VC++多串口控制解决方案(DLL) 工业控制--串口通讯方法(WINAPI实现).zi上位机开发VC串口学习资料源p...
一、如果在运行某软件或编译程序时提示缺少、找不到dll等类似提示,您可将下载来的dll拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用。 二、直接拷贝该文件到系统目录里:...
详细介绍了Matlab怎么生成DLL文件,及DLL文件在VC中的应用,值得学习
C#引用C++动态库 dll 实例 项目含有C++编写DLL C#引用C++dll
COM接口技术实现Dll文件的相互调用 COM接口,COM接口技术,Dll文件的相互调用
摘要:VB源码,控件组件,DLL VB做DLL并引用DLL的源码实例,新建个ActiveX DLL工程,修改类名,将Class1改成thedll,(也可以改成其他名字,在exe中要注意声明类名就是你改的那个),写DLL代码(代码和类一样,有属性...
使用PB编写DLL文件 使用PB编写DLL文件 使用PB编写DLL文件 使用PB编写DLL文件
ZedGraph.dll文件下载,引用下就可以显示图形了
Xshell缺失mfc110u.dll文件解决方案
多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 开始-》运行 -》 "cmd" -> "cd C:\Program Files\Microsoft\ILMerge" 3:) 3.1、合并file1.dll、file2.dll...
通达信DLL开发视频教程,目前只出了几个章节,后续慢慢加上。 基础教程 1。讲解搭建开发环境 1_开发工具选择及安装 2_VS2005软件介绍 3_新建项目介绍 4_文件结构介绍 5_项目属性介绍 6_编译生成调试介绍 2...