VS2012 将工程编译为Release,引用dll找不到的问题

VS2012 将工程编译为Release,引用dll找不到的问题

前言: 我们再vs中编写的项目,经常需要将项目编译为Release版本拷贝给他人使用,但是,我们引用的很多dll文件别人的电脑上有时候并没有,此时我们需要将工程中引用的dll一并打包编译至Release中,那么如何将本机引用的dll一并打包呢?有以下三种方式

解决方案一、在引用中右击dll选择属性,将【复制本地】属性选为true。此时编译Release将会把该dll自动放在Release文件下。
在这里插入图片描述

解决方案二、 先编译Release,再将所有用的dll全部拷贝至Release文件夹下,其实本质和第一种解决方案一样

解决方案三、 以上两种方式都是将dll直接放到Release文件夹下,因为程序再运行的时候,需要某dll时,会先到Release文件夹下找该dll,如果找不到就会去系统下找该dll,如果都找不到,则报错!因此我们可用上面两种解决方案解决。但是,如果我们引用的dlld过多,或者有各种类型的dll,那么全部放在Release文件夹下不仅看上去比较乱,而且分类不清晰,因此,我们可以想办法在编译的时候,在Release文件夹下建立各个类型的子文件夹用以放置dll。但是,因为程序默认仅仅到Release文件夹这一级目录下寻找dll,故这样做也会导致程序无法运行。对此解决方案如下:

1、首先在工程中添加文件夹,我此处添加libs文件夹,然后将各个类别的dll放到添加的子文件夹下,如下图
在这里插入图片描述
2、选择我们文件夹中的dll,右键属性,将【复制到输出目录】设置为如果较新则复制

在这里插入图片描述

3、打开App.config 添加runtime节点,如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <runtime>
    <!--动态链接库引用位置-->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="libs;libs\devdll;libs\earidll;libs\videodll;libs\sqlitedll"/>
    </assemblyBinding>
  </runtime>
  
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

4、至此,再编译的程序将会自动将我们的dll文件夹结构复制到Release文件中,并且能找到该dll
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
一、简介   AheadLib 是用来生成一个特洛伊DLL的工具,用于分析DLL中的函数参数调用(比如记录Socket send了什么等等)、更改函数功能(随心所欲了:)、更改界面功能(比如在Hook里面生成一个按钮,截获事件等等)。 二、使用   1.用 AheadLib 打开要模拟的 DLL,生成一个 CPP 文件。   2.用 Visual Studio 6.0/.NET 建立一个 DLL 工程,把这个 CPP 文件加入到项目中。   3.使用 Release 方式编译,生成的 DLL 将和原来的 DLL 具有一模一样的导出函数,并且能顺利把这些函数转发到原来的函数中。   4.AheadLib 还可以生成 Hook 代码,用于截取当前进程的所有消息,这样就可以随心所欲地处理各种消息了 (修改第三方程序界面功能的好助手)。 三、备注   1.如果导出函数过多,在 Visual Studio 6.0 中,如果出现编译错误,请在项目属性关闭与编译头功能。   2.如果是 C++ 、C __stdcall、C __fastcall 的方式导出的话,生成的函数声明将会还原成原代码级别(可能需要修改才能编译,比如导出C++类的情况)。此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。   3.如果是 NONAME 或者 C _CDECL 方式导出(比如 DEF 导出,大多数Windows DLL都是这种情况,比如WS2_32等等),则使用#pragma comment(linker, "/EXPORT:...)导出,且指定导出序号。   4.如果系统中没有 DbgHelp.dll,将无法识别 C++ 模式的导出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mekeater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值