• C# DLL实现泄露实验


    先说结论:如果应用程序项目中使用直接引用的形式调用动态链接库,当动态链接库是在调试模式生成的情况下,即使应用程序以发布模式生成,跟随应用程序一同生成的动态链接库仍为调试模式,会引发DLL实现泄露问题;当动态链接库是在发布模式生成,则不论应用程序的生成模式,都无法通过跟随应用程序一同生成的动态链接库查看内部实现细节,需注意。

    实验条件:

    两个控制台工程,一个类库工程。

    类库工程内容如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace ClassLibrary1
    7. {
    8. public class Class1
    9. {
    10. public void ConsoleWriteLineA()
    11. {
    12. Console.WriteLine("A");
    13. }
    14. }
    15. }

     控制台工程内容如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace ConsoleApp1
    7. {
    8. internal class Program
    9. {
    10. static void Main(string[] args)
    11. {
    12. ClassLibrary1.Class1 class1 = new ClassLibrary1.Class1();
    13. class1.ConsoleWriteLineA();
    14. Console.Read();
    15. }
    16. }
    17. }
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace ConsoleApp2
    7. {
    8. internal class Program
    9. {
    10. static void Main(string[] args)
    11. {
    12. ClassLibrary1.Class1 class1 = new ClassLibrary1.Class1();
    13. class1.ConsoleWriteLineA();
    14. Console.Read();
    15. }
    16. }
    17. }

    实验步骤:

    在调试模式下生成DLL,在Exe1项目中直接引用DLL,在发布模式下生成Exe1,此时Exe1的默认生成路径下内容如下:

    在Exe2项目中调用Exe1默认生成路径下的DLL,此时进行Exe2项目调试时,能够通过DLL方法查看DLL内部实现。

    如果将Exe1项目中直接引用的DLL改为发布模式下生成的DLL,再以Exe2项目直接引用Exe1默认生成路径下的DLL,则会弹窗:

    也无法进入DLL查看内部实现。

  • 相关阅读:
    C++ set容器
    C++数据结构之字符串
    文心一言简单体验
    这款“三无产品“ 值得曝光...
    第十六章《正则表达式》第1节:正则表达式入门
    【pandas小技巧】--DataFrame的显示样式
    MATLAB向量的运算
    中国锦纶行业市场全景调研及投资价值评估研究报告
    Ompal138+Spartan-6 FPGA开发板规格软硬件资料数据手册
    【brpc学习实战二】brpc client构建基本流程
  • 原文地址:https://blog.csdn.net/Cecile0828/article/details/136377899