C# 反编译导致错误CS1112,程序集混乱

C# 反编译导致错误CS1112,程序集混乱,c#,.net,.net-assembly,decompiling,compiler-services,C#,.net,.net Assembly,Decompiling,Compiler Services,因此,我通过de4dot运行了一个C#university程序,然后通过reflector对其进行反编译,当我在VS中运行它时,出现了以下错误 [程序集:System.Runtime.CompilerServices.Extension] 错误CS1112不使用 “System.Runtime.CompilerServices.ExtensionAttribute”。使用“this” 关键词 相反客户端C:\Users\user\Desktop\333\as2\decom\AssemblyInf

因此,我通过de4dot运行了一个C#university程序,然后通过reflector对其进行反编译,当我在VS中运行它时,出现了以下错误

[程序集:System.Runtime.CompilerServices.Extension]

错误CS1112不使用 “System.Runtime.CompilerServices.ExtensionAttribute”。使用“this” 关键词 相反客户端C:\Users\user\Desktop\333\as2\decom\AssemblyInfo.cs 15处于活动状态


我尝试用this和this()等替换代码,但这只会导致其他问题。有人能解释一下我要用“这个”来代替什么吗?我觉得我在这里遗漏了一些明显的东西。

您要在方法中添加
修饰符:

public static class FooExtensions
{
    public static void DoSomething(this Foo foo)
    {
        ...
    }
}
这使它成为一种扩展方法


一般来说,我不会尝试使用反编译器来“往返”代码-反编译器可以用来查看编译器实际做了什么,但在各种情况下,结果是不可编译的。

代码>[assembly:Extension]当程序集包含扩展方法时,编译器会将属性添加到程序集。这是自动发生的,根据您看到的错误,编译器不希望您显式地执行此操作。假设反编译器输出的其余部分是正确的,注释掉assembly-level属性,就可以了


也就是说,您永远不应该假设反编译器的输出是正确的。

更糟糕的是,在某些情况下,结果是不正确的(即使它确实编译了)。这会返回警告,提示它将被忽略