2011-10-04 48 views
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或協方差,我沒有使用它。

任何線索?

謝謝。

+0

我認爲正確的谷歌查詢是+ allowpartiallytrustedcallers + verifexception –

+0

@Hans,感謝您的答覆。我也遇到過,忘記提及遠程應用程序正在完全信任狀態下運行。不應該克服'AllowPartiallyTrustedCallers'問題嗎?此外,我打電話真的需要嗎? – harpo

+0

除非另有說明,否則總是值得三重檢查。 –

回答

1

現在,這個問題已經觀看0x80次,我會後當我再也不能推遲遷移到.NET 4

我最近使用的解決方案你必須針對.NET 4平臺在構建中,並設置以下組件屬性。

using System.Security; 

// Needed to enable generic deserialization in partial trust. 
[assembly: SecurityRules(SecurityRuleSet.Level1)] 

我曾評論說我處於完全信任模式,但我一定是錯了。這是只有部分信任環境中的問題。

相關問題