C# 方法调用需要引用程序集。为什么?

C# 方法调用需要引用程序集。为什么?,c#,.net,.net-assembly,C#,.net,.net Assembly,大会A class A { void SaveToDisk(); // Calls B.Extract } 大会B class B { static void Extract(); // References Ionic.Zip } 编译器告诉我程序集A也需要对Ionic.Zip的引用,即使程序集A在SaveToDisk方法中没有对Ionic.Zip中的任何类型的引用。为什么需要在程序集A中引用Ionic程序集?是否可能B也有一个重载静态无效提取(SomeTypeFromIo

大会A

class A {
    void SaveToDisk(); // Calls B.Extract
}
大会B

class B {
    static void Extract(); // References Ionic.Zip
}

编译器告诉我程序集A也需要对Ionic.Zip的引用,即使程序集A在SaveToDisk方法中没有对Ionic.Zip中的任何类型的引用。为什么需要在程序集A中引用Ionic程序集?

是否可能B也有一个重载
静态无效提取(SomeTypeFromIonicZip参数)
?有一个带有ZipFile参数的重载。这会导致这种情况吗?可能assembly
B
会在其他地方公开assembly
C
中的类型。您正在将类型从icogal.zip泄漏到程序集元数据中。从片段中看,这是不明显的,如果你不知道这是怎么发生的,考虑反编译器。是的,过载是错误的。若要选择正确的重载,.NET需要引用Ionic.Zip以检查是否存在从SomeType到ZipFile的隐式转换。