初始化StructureMap引导程序时抛出System.Security.SecurityException

时间:2011-11-17 01:52:13

标签: exception .net-4.0 structuremap bootstrapping system.security

我使用Visual Studio开发服务器(内置于VS2010的Web服务器)在本地运行.NET 4.0 Web应用程序,在过去的几个月中,我的StructureMap引导程序文件运行良好。

我正在使用StructureMap 2.6.1

我没有更改Bootstrapper文件或Web.config文件,突然间,我在尝试启动Web应用程序时遇到了这个奇怪的错误。

以下是从网站引发的错误:

error

这有点难以阅读。它说:

Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.
Exception Details: System.Security.SecurityException. Request Failed.

这是我的bootstrapper文件中的代码:

public class BootStrapper
{
    public static void ConfigureStructureMap()
    {            
        ObjectFactory.Initialize(x =>
        {
            x.AddRegistry<ProductRegistry>();
        });
    }   
}

public class ProductRegistry : Registry
{
    public ProductRegistry()
    {

        For<IFirmRepository>()
            .Use<FirmRepository>().Ctor<string>("connectionString").Is(ConfigurationManager.ConnectionStrings["FeesAndFlows"].ConnectionString);

        For<ICryptographyService>()
            .Use<Rijndael>();

        For<IUserRepository>()
            .Use<UserRepository>().Ctor<string>("connectionString").Is(ConfigurationManager.ConnectionStrings["FeesAndFlows"].ConnectionString);

        For<IAuthenticationService>()
            .Use<AuthenticationService>();

        For<ILogger>()
            .Use<DatabaseLogger>();

    }
}

这一行引发了错误:

x.AddRegistry<ProductRegistry>();

我已经尝试将这些行中的每一行添加到我的Web.config文件中,一次一个,但他们没有解决问题:

<trust level="Full" />

<securityPolicy>
    <trustLevel name="Full" policyFile="internal"/>
</securityPolicy>

有没有人有任何想法或者可能听说过这样的问题?这非常重要,没有StructureMap正常启动的b / c,我的整个应用程序都无法运行。

谢谢, 麦克

更新:

好的,所以看来我的问题是本地的。这里的其他开发人员可以下载代码,并在本地计算机上运行它。奇怪的。他们引导StructurMap就好了,所有实例都被解析了......

为什么只有我的机器能够在我的网络项目本地调试模式下运行时才能引导StructureMap?

3 个答案:

答案 0 :(得分:0)

您是否正在运行网络驱动器中的代码(即您的文档文件夹是否重定向到网络驱动器上)?您是否在域上运行的企业环境中?

如果是前者,则可能是代码在Intranet安全上下文中运行。如果前者不是真的,但后者是真的,那么网络管理员很可能已经改变了企业范围的CAS策略。

答案 1 :(得分:0)

好的,这就是问题所在。 Win7阻止了StructureMap.dll。我不知道如何阻止它或阻塞它的位置,但显然,当我将StructureMap.zip文件下载到我的系统时,.zip文件被阻止,反过来,导致从.zip文件中提取的所有项目也被阻止。

每当我解锁它时,当我尝试运行网络应用时,它又会被阻止。

我修复它的方法是返回原始.zip文件,取消阻止,解压缩,然后将我的StruectureMap.dll引用替换为未被阻止的文件。

疯狂。

我甚至不知道什么导致文件突然被阻止或Windows 7中的哪个进程确定应该阻止哪些文件,但是这个奇怪的操作系统&#34;功能&#34;花了我一天的工作。

答案 2 :(得分:0)

我在完全相同的地方,ObjectFactory.Initialize:

有完全相同的问题
  

'/X.ServiceHost'应用程序中的服务器错误。

     

覆盖成员时违反了继承安全规则:   “StructureMap.StructureMapException.GetObjectData(System.Runtime.Serialization.SerializationInfo,   System.Runtime.Serialization.StreamingContext)”。安全   覆盖方法的可访问性必须与安全性相匹配   被覆盖的方法的可访问性。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.TypeLoadException:继承安全性   覆盖成员时违反规则:   “StructureMap.StructureMapException.GetObjectData(System.Runtime.Serialization.SerializationInfo,   System.Runtime.Serialization.StreamingContext)”。安全   覆盖方法的可访问性必须与安全性相匹配   被覆盖的方法的可访问性。

从NuGet(2.6.4.1)获取最新的StructureMap软件包解决了这个问题。

StructureMap NuGet Package