2010-04-23 18 views
1

我是.NET學生,目前我們正在瞭解應用程序域。 我們得到了以下示例代碼(對於.NET 3.5)。正如所料,它會引發SecurityException。 注意:TestApp.exe作爲項目中的參考添加。.NET 4.0 AppDomain:已過時證據

Dim file As String = "TestApp.exe" 
Dim hostEvidence As Object() = {New Zone(SecurityZone.Internet)} 
Dim appDomainEvidence As Evidence = New Evidence(hostEvidence, Nothing) 
Dim d As AppDomain = AppDomain.CreateDomain("MyDomain", appDomainEvidence) 
d.ExecuteAssembly(file) 

當試圖在VS2010下運行這個在.NET 4.0下我遇到了一個問題。 首先,它顯示一個警告

'的Public Sub New(hostEvidence()爲對象,assemblyEvidence()作爲對象)' 已過時:「這種構造是過時的。請使用帶有EvidenceBase數組的構造函數。'。

我將hostEvidence的類型更改爲EvidenceBase(),警告消失。 但是,當試圖運行應用程序時,它會給出錯誤。

此方法隱式使用CAS策略,該策略已被.NET Framework廢棄。爲了兼容性原因啓用CAS策略,請使用NetFx40_LegacySecurityPolicy配置開關。請參閱http://go.microsoft.com/fwlink/?LinkID=155570瞭解更多信息。

我已經查看的頁面,然後鏈接到如何:在沙箱中運行部分信任的代碼和讀取http://blogs.msdn.com/shawnfa/archive/2009/05/27/coding-with-security-policy-in-net-4-0-implicit-uses-of-cas-policy.aspx但我無法理解這一切。

與我目前的代碼相比,MSDN上的代碼示例相當大,因此任何有關更改我的代碼的幫助,以便它在不添加其他內容的情況下都能正常工作,我們將非常感激。

回答

3

正如它在您提供的鏈接中所說的那樣,.NET從4.0版本開始不再支持代碼訪問安全框架的策略部分。

換句話說,你的課程是關於.NET 3.5的,並不涉及到4.0框架。解決方案是恢復到您的原始代碼和configure your project to target the 3.5 framework(您仍然可以使用Visual Studio 2010)。

+0

我意識到減少約爲3.5,但遷移的MSDN頁面在代碼中使用* SecurityZone.Internet *。我只是覺得它比我想要的要多,而且我沒有經驗去拿出我需要的零件。 – Stijn 2010-04-23 13:38:51

+0

您的課程*可能*也適用於.NET 4.0,但您尚未提供足夠的信息來說明您的問題。 (並且可能不能)如果您在學習材料時繼續嘗試使用4.0 *,那麼隨着語言和框架的變化,您可能會冒更多令人討厭的驚喜。您仍然可以使用Visual Studio 2010,但您不應將其定位到4.0框架。 – 2010-04-23 14:03:05

+0

公平點。感謝您的時間。 – Stijn 2010-04-23 14:04:24