.NET 反编译程序集在产生构建错误的类型之后有一个“&”

.NET decompiled assembly has an '&' after the type producing build error

我继承了一些据我所知是使用 Visual Studio 2005、.NET Framework 1.1(?) 和 VB.NET 生成的程序集。不幸的是,源代码不再对我可用。因此,我使用 dotPeek 反编译程序集(作为 C#)并尝试对项目进行逆向工程。生成的源代码有几行看起来类似于:

// ISSUE: explicit reference operation
// ISSUE: variable of a reference type
string& szDataDescr = @str;

'string&' 对我来说很陌生(显然 Visual Studio 也很陌生)。 Visual Studio 2015 没有将其识别为有效,我遇到了编译错误。 “&”是 dotPeek 添加的内容,还是当时有效的一些遗留 .NET 构造?在使用 'type&' 模式的任何地方都会出现类似的注释,因此我认为它是关联的。

类型名称后面的 & 符号表示它是引用类型,变量名称前面的 @ 生成对该变量的引用。

如果你试图编译代码,你会得到一个错误,因为编译器将 & 视为按位与,并且会抱怨你使用了一个类型,就好像它是一个变量一样。但这没关系,因为您不是从 C# 源文件中获取它的。

最佳解决方案是使用不同的反编译器。

在此处查看有关 what the & does in IL 的更多信息。