2011-04-04 30 views
3

這與Odd Exception in MVC 3 Project類似。legacyCasModel =「true」和動態數據/操作

我們有一個完全信任的ASP.NET 4.0應用程序。我們需要在web.config中有以下行,否則我們正在使用的一個庫不起作用。 (因爲它明確使用.NET以前版本中現在已經過時的CAS模型)。

<trust legacyCasModel="true" /> 

鑑於此設置,我們無法使用動態關鍵字或依賴它的ASP.NET MVC的某些功能。

作爲一個例子,下面的代碼會導致一個例外:

dynamic d = new object(); 
d.test = "jason"; 

唯一的例外是:

Dynamic operations can only be performed in homogenous AppDomain. 

有沒有什麼辦法可以讓動態關鍵字的工作,如果legacyCasModel設置爲true ? (如果設置爲false,一切工作正常,但需要它的庫)。

思路:

  1. 鑑於我完全信任正在運行,我認爲在AppDomain中一個組件利用權限減少(因此是非同質的)。有沒有一種方法可以簡單地告訴它以完全信任模式運行,從而使AppDomain變得同質?

  2. 我應該能夠重構我的代碼以某種方式加載有問題的程序集在另一個AppDomain中?我不熟悉這樣做的典型方式,但看起來很複雜。

  3. 是否有一些其他的神奇配置設置,我可以使其工作?

+0

你試過把它加載到***不同的appdomain ***嗎?有關它的任何源代碼? – Kiquenet 2015-11-30 11:23:15

回答

1

我沒有使用很多DLR的東西,但我只是試過一個快速測試。在一個控制檯應用程序的命令相同的失敗...

 dynamic d = new object(); 
     d.test = "jason"; 
     Console.WriteLine(d.test); 

但這種成功...

 dynamic d = new ExpandoObject(); 
     d.test = "jason"; 
     Console.WriteLine(d.test); 

當使用動態對象,你可能需要使用ExpandoObject,而不是普通的舊對象。

在ExpandoObject不能滿足您的需要更強大的東西像http://clay.codeplex.com/

===如果我讀充分的問題編輯===

幫助...

添加的情況下, <trust legacyCasModel="true" level="Full" />混合會導致錯誤和提供的錯誤。

「legacyCasModel」強制使用非同類域,因爲它是.net4之前的做事方式。這意味着動態對象和舊的CAS庫不兼容。

我能看到的唯一有效解決方法是將舊的CAS庫抽象爲run in a seperate application domain

+0

我相信實際上有一個ExpandoObject是我第一次遇到麻煩,因爲同樣的問題而不得不重寫它。 :( – 2011-04-05 00:03:25

+0

更新了進一步實驗的意見 – JTew 2011-04-05 03:06:57

+0

我傾向於和你一樣的結論 – 2011-04-05 13:15:15