VS编译间接引用的DLL不一定输出

当A引用B,B引用C时,通常A编译会输出B和C的DLL。然而,如果B仅通过常量方式调用C,VS可能不输出C的DLL。通过ildasm工具检查,发现B的DLL未引用C。实际上,编译器优化使得常量在编译时被替换,因此A能正确运行。只有当B对C有方法或变量调用时,C的DLL才会被输出。const与static的处理方式不同,影响编译结果。
摘要由CSDN通过智能技术生成

如果A引用B,B引用C,那么A对C就是间接引用,一般的编译A时会输出B的DLL,而因为B对C有引用,所以也会输出C的DLL。但是实际编译时发现,并不一定都会输出C的DLL。后面不断的追查原因,最终发现是与B对C引用时代码的调用有关。如果B对C的调用都是常量的方式,比如C中都是CONST常量,或者B只调用了C的CONST常量。那么编译的时候,B不会带上C的引用,这个可以ildasm工具,去查看B的DLL,然后可以看到引用的情况。

先来看C库的代码

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

namespace C
{
    public sealed class ClassC
    {
        public const string TC = "MY_CONST";
    }
}

再来看B库的代码

using C;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace B
{
    public class ClassB
    {
        public static string TestB()
        {
            return ClassC.TC + "=>call C ok";
        }
    }
}

再来看C的代码

using B;
using System;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值