将方法作为扩展方法调用比直接调用它需要更多的引用

Vac*_*ano 7 .net c# extension-methods reference

我有一个扩展方法,我将调用HelperAssembly看起来类似于:

public static class HelperClass
{
    public static void MyHelperMethod(this SomeClass some, OtherClass other)
    {
        // This object is defined in OtherAssembly1
        ObjectFromOtherAssembly1 object1 = new ObjectFromOtherAssembly1(some);

        // This object is defined in OtherAssembly2
        ObjectFromOtherAssembly2 object2 = new ObjectFromOtherAssembly2(other);

        DoStuffWith(object1, object2);    
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个程序集,我将调用CallerAssembly,它引用了HelperAssembly.

我的HelperAssembly引用了OtherAssembly1OtherAssembly2.

SomeClass和OtherClass都在ReferenceAssembly中定义. HelperAssemblyCallerAssembly引用了ReferenceAssembly.

当我从CallerAssembly调用我的方法时,一切都很棒:

HelperClass.MyHelperMethod(some, other);
Run Code Online (Sandbox Code Playgroud)

但是,当我像这样调用它时(作为扩展方法),我会遇到构建错误:

some.MyHelperMethod(other);
Run Code Online (Sandbox Code Playgroud)

错误表明CallerAssembly需要引用OtherAssembly1OtherAssembly2.

我很迷惑.我认为扩展方法语法只是语法糖,但实际上并没有改变编译方式.

我不想添加它建议的引用,所以我不会将调用作为扩展方法.但我想了解不同之处.

为什么调用方法直接构建正常但调用它作为扩展方法无法构建?

小智 1

CallerAssembly 是否有可能针对 .NET Framework 客户端配置文件,而 HelperAssembly 是否有可能针对“完整”.NET Framework?

当我这样做时,我遇到了扩展方法(和其他事情)的问题。