0

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

我正在使用 StructureMap 2.6.1

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

这是从网站抛出的错误:

错误

读起来有点难。它说:

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.

这是我的引导程序文件中的代码:

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 并且所有实例都已解决...

关于为什么我的机器在本地为我的 Web 项目以调试模式运行时无法引导 StructureMap 的任何想法?

4

3 回答 3

0

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

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

于 2011-11-17T02:01:39.657 回答
0

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

每次我取消阻止它时,当我尝试运行网络应用程序时它又回到阻止状态。

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

疯狂的。

我什至不知道是什么导致文件突然被阻止,或者 Windows 7 中的哪个进程决定了应该阻止哪些文件,但是这个奇怪的操作系统“功能”让我花了一天的时间。

于 2011-11-22T21:33:18.263 回答
0

我在同一个地方遇到了完全相同的问题,ObjectFactory.Initialize:

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

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

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

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

从 NuGet (2.6.4.1) 获取最新的 StructureMap 包修复了该问题。

StructureMap NuGet 包

于 2012-09-06T03:10:34.760 回答