C#非强签名dll搜索顺序,C非强签名DLL搜索顺序解析

马肤

温馨提示:这篇文章已超过409天没有更新,请注意相关的内容是否还可用!

摘要:在C#中,当涉及到非强签名dll的搜索顺序时,系统首先会在本地目录和系统的路径中查找这些dll文件。如果在这些地方没有找到,它会转向系统的全局程序集缓存(GAC)进行搜索。环境变量路径也会被考虑在内。C#对非强签名dll的搜索顺序是本地目录、系统路径、GAC和环境变量路径。

预备工作

C#非强签名dll搜索顺序,C非强签名DLL搜索顺序解析 第1张

1、新建解决方案ClassLibrary1,并新建类库ClassLibrary1。

2、新建控制台程序ShowDllLoc。

利用VS添加引用

一,通过app.config设置codebase,设置dll的加载路径为codebaselibs\ClassLibrary1.dll。

二,设置私有目录为libs。

建立类库,其中包含一个函数:

public class Class1
{
    public static void ShowLoc()
    {
        Console.WriteLine(typeof(Class1).Assembly.Location);
    }
}

建立控制台项目,主函数如下:

internal class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("begin ");
        ClassLibrary1.Class1.ShowLoc();
        Console.ReadKey();
    }
}

实验

1、在codebaselibs、exe所在目录、ClassLibrary1、libs目录各存放一个ClassLibrary1.dll,启动程序,结果显示优先加载codebase设置目录的dll。

C#非强签名dll搜索顺序,C非强签名DLL搜索顺序解析 第2张

2、删除codebaselibs目录的dll,启动程序,程序崩溃退出,如果设置了codebase只会在codebase目录寻找。

3、删除codebase设置,启动程序,结果优先加载 exe目录的dll。

4、删除exe所在目录的dll,启动程序,结果优先加载dll同名目录的dll。

5、删除ClassLibrary1目录的dll,启动程序,最后加载私有目录的dll。

动态加载

如果在多个目录都有dll,并且尝试动态加载dll,结果会根据目录的优先级来加载,测试发现,动态加载dll不会在codebase目录寻找,如果同时手动加载和自动加载,手动加载和自动加载的都会加载codbase目录的dll,但如果添加了引用,但没有调用此类库的函数,此dll并不会自动加载,手动加载不会影响自动加载,关于dllcalldll.dll引用另外一个dll的情况,无论exe是否配置codebase,dllcalldll.dll的codebase永远无效,可以通过修改ShowDllLoc.exe.config来临时修改codebase目录,关于C#动态加载dll的小技巧也一并进行了介绍。

需要注意的是测试环境为win7或win10操作系统,使用VS2019或VS2022开发环境,如无特殊说明,本算法用C++实现。 文中还提供了扩展阅读部分包括视频课程和相关资料的下载链接,最后想对读者说的话是:闻缺陷则喜是一个美好的愿望,早发现问题早修改问题可以给老板节约钱,子墨子言之:事无终始,无务多业,如果程序是一条龙,那算法就是它的眼睛,希望读者能够专注于专业的事,用算法为程序赋予更多的智慧。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码