【发布时间】:2011-08-02 23:07:55
【问题描述】:
帮帮我 - 为什么这段代码在 .NET 4.0 下运行时会导致 VerificationException?
public T parseEnum<T>(string value, T defaultValue) {
//Removing the following lines fixes the problem
if (!typeof(T).IsEnum) throw new ArgumentException("T must be an enumerated type");
return defaultValue;
}
我在 .net 2.0 程序集上运行 peverify 并收到以下消息:
ImageResizer.Util.Utils::parseEnum[T]][offset 0x0000000A] 调用的'this'参数必须是调用方法的'this'参数。
这会在中等信任下运行代码时导致VerificationException: Operation could destabilize the runtime 消息。
我已经阅读了所有关于堆栈溢出的类似帖子,但没有一篇适用于这段代码。
泛型是否有一些新的东西会导致这段代码在某种程度上无效?
【问题讨论】:
-
我刚刚运行了这段代码,没有收到这样的异常。你确定这是错误所在吗?这是在asp中使用的吗?
-
您是使用 Visual Studio 还是其他编译器(如 Mono)生成 .NET 程序集?
-
该错误消息向我表明它在调用站点(即您调用该方法的位置)有此问题。你能把这段代码也给我们看看吗?
-
程序集是使用 VS 2010 生成的。以低信任度运行代码以重现错误。下面是一个调用代码的例子:`totalBehavior = parseEnum
("sizelimits.totalbehavior", TotalSizeBehavior.ThrowException); -
另外,我发现
peverify只有在方法中出现if (!typeof(T).IsEnum)行时才会阻塞。