这里是我在.NET2.0中使用多年的一个简单的反序列化方法的一部分。CCD_ 1是一个不受约束的类型参数。
protected virtual T ItemFromString(string s) {
if (typeof(T).IsPrimitive ||
typeof(T) == typeof(string)) {
try {
// needed for string, too: compiler doesn't allow (T)s
return (T)Convert.ChangeType(s, typeof(T));
}
catch (Exception ex) {
// stuff
}
}
}
我将应用程序池更改为在4.0中运行,一切都很好—;直到我将其部署到远程服务器。在那里,我在线上得到了"操作可能会破坏运行时的稳定">
return (T)Convert.ChangeType(s, typeof(T));
(实际上,报告的行是该方法的结束括号,但我已经将其缩小到该行。(
如果我将运行时更改回2.0,问题就会消失。
运行时版本均为4.0.30319
。该应用程序在其他方面是相同的,包括web.config
。两个应用程序都使用共享应用程序池并在完全信任下运行。大概是另一个环境在影响它,但我不知道该怎么弄清楚。
我所发现的一切都涉及Reflection.Emit
或协方差,我没有使用它。
有线索吗?
谢谢。
既然这个问题已经被0x80
次查看了,我将发布我最近使用的解决方案,因为我再也不能推迟迁移到.NET 4了。
您必须在生成中以.NET 4平台为目标,并设置以下程序集属性。
using System.Security;
// Needed to enable generic deserialization in partial trust.
[assembly: SecurityRules(SecurityRuleSet.Level1)]
我曾评论说我处于完全信任模式,但我一定错了。这只是部分受信任环境中的问题。