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

相关推荐
hez20101 天前
在 .NET 上构建超大托管数组
c#·.net·.net core·gc·clr
雨落倾城夏未凉7 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫8 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫9 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6259 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902119 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠10 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫12 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech12 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf14 天前
C#摸鱼实录——IoC与DI案例详解
c#