0
這是我在.NET 2.0中使用多年的簡單反序列化方法(的一部分)。 T
是一個無約束的類型參數。在一個ASP.NET 4.0盒子上導致「操作可能會使運行時不穩定」而不是另一個
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
或協方差,我沒有使用它。
任何線索?
謝謝。
我認爲正確的谷歌查詢是+ allowpartiallytrustedcallers + verifexception –
@Hans,感謝您的答覆。我也遇到過,忘記提及遠程應用程序正在完全信任狀態下運行。不應該克服'AllowPartiallyTrustedCallers'問題嗎?此外,我打電話真的需要嗎? – harpo
除非另有說明,否則總是值得三重檢查。 –