如果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;