1

我是一名 .NET 学生,目前我们正在学习应用程序域。我们得到了以下示例代码(用于 .NET 3.5)。正如预期的那样,它抛出了一个 SecurityException。注意:TestApp.exe 作为参考添加到项目中。

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)

当试图在 .NET 4.0 下的 VS2010 中运行它时,我遇到了一个问题。首先它显示一个警告

'Public Sub New(hostEvidence() As Object, assemblyEvidence() As Object)' 已过时:'此构造函数已过时。请改用采用 EvidenceBase 数组的构造函数。

我将 hostEvidence 的类型更改为 EvidenceBase() 并且警告消失了。但是,当尝试运行应用程序时,它会出错。

此方法隐式使用 .NET Framework 已废弃的 CAS 策略。为了出于兼容性原因启用 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 上的代码示例相当大,因此任何有关更改我的代码以使其无需添加其他内容即可工作的帮助将不胜感激。

4

1 回答 1

3

正如它在您提供的链接中所说,从 4.0 版开始,.NET 不再支持代码访问安全框架的策略部分。

换句话说,您的课程是关于 .NET 3.5 的,与 4.0 框架无关。解决方案是恢复到您的原始代码并将您的项目配置为面向 3.5 框架(您仍然可以使用 Visual Studio 2010)。

.

于 2010-04-23T13:34:19.157 回答