C# DLL实现泄露实验

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

实验条件:

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

类库工程内容如下:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary1
{
    public class Class1
    {
        public void ConsoleWriteLineA()
        {
            Console.WriteLine("A");
        }
    }
}

控制台工程内容如下:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ClassLibrary1.Class1 class1 = new ClassLibrary1.Class1();
            class1.ConsoleWriteLineA();
            Console.Read();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ClassLibrary1.Class1 class1 = new ClassLibrary1.Class1();
            class1.ConsoleWriteLineA();
            Console.Read();
        }
    }
}

实验步骤:

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

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

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

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

相关推荐
IT猿手11 分钟前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
AI科技星21 分钟前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
sunwenjian88635 分钟前
Java进阶——IO 流
java·开发语言·python
波特率11520040 分钟前
const关键字与函数的重载
开发语言·c++·函数重载
FL16238631291 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
百锦再1 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven
条tiao条1 小时前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
干啥啥不行,秃头第一名1 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
2301_807367192 小时前
C++中的解释器模式变体
开发语言·c++·算法
always_TT2 小时前
C语言中的字符与字符串(char数组)
c语言·开发语言