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查看内部实现。

相关推荐
lly20240615 分钟前
C++ 文件和流
开发语言
m0_7066532321 分钟前
分布式系统安全通信
开发语言·c++·算法
寻寻觅觅☆1 小时前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
刘欣的博客1 小时前
C# CS架构程序发版升级的走数据库方案
c#·单文件升级自己的方式
lightqjx1 小时前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
zh_xuan1 小时前
kotlin lazy委托异常时执行流程
开发语言·kotlin
阿猿收手吧!2 小时前
【C++】string_view:高效字符串处理指南
开发语言·c++
玄同7652 小时前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding
Yorlen_Zhang2 小时前
Python Tkinter Text 控件完全指南:从基础编辑器到富文本应用
开发语言·python·c#
lxl13072 小时前
C++算法(1)双指针
开发语言·c++