Исключение System.Security.SecurityException при инициализации загрузчика StructureMap - PullRequest
0 голосов
/ 17 ноября 2011

Я запускаю веб-приложение .NET 4.0 локально, используя Visual Studio Development Server (встроенный веб-сервер с VS2010), и за последние пару месяцев мой файл загрузчика StructureMap работал отлично.

IЯ использую StructureMap 2.6.1

Я не изменил файл Bootstrapper или файл Web.config, и внезапно я получаю эту странную ошибку при попытке запустить мое веб-приложение.

Вот ошибка с веб-сайта:

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.

вот код в моем файле начальной загрузки:

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>();

I 'Мы уже пытались добавить каждую из этих строк в мой файл Web.config, по одной за раз, и они не устранили проблему:

<trust level="Full" />

и

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

Кто-нибудьесть какие-нибудь идеи или, возможно, слышали о такой проблеме?Это очень важно, потому что б / к без StructureMap запускается правильно, все мое приложение не будет работать.

Спасибо, Майк

ОБНОВЛЕНИЕ:

Хорошо, так что, похоже, моя проблемаместныйДругие разработчики могут загрузить этот код, и он прекрасно работает на своих локальных машинах.Weird.Они прекрасно загружают StructurMap, и все экземпляры решаются ...

Есть идеи, почему просто моя машина не может загрузить StructureMap при локальном запуске в режиме отладки для моего веб-проекта?

Ответы [ 3 ]

0 голосов
/ 23 ноября 2011

Хорошо, вот в чем проблема.StructureMap.dll был заблокирован Win 7. Я не знаю, как его заблокировали или где он был заблокирован, но, очевидно, когда я загрузил файл StructureMap.zip в свою систему, файл .zip был заблокирован, что, в свою очередь,, привело к тому, что все элементы, извлеченные из файла .zip, также были заблокированы.

Каждый раз, когда я разблокировал его, он возвращался к заблокированному при попытке запустить веб-приложение.

Чтобы исправить это, нужно было вернуться к исходному .zip-файлу, разблокировать его, извлечь его, а затем заменить ссылку StructureMap.dll на другую, которая не была заблокирована.

Insane.

Я даже не знаю, ЧТО приводит к тому, что файл внезапно блокируется или какой процесс в Windows 7 определяет, какие файлы должны быть заблокированы, но эта странная «функция» операционной системы стоила мне работы в день.

0 голосов
/ 06 сентября 2012

У меня была точно такая же проблема в том же месте, 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). Безопасность доступность переопределяющего метода должна соответствовать безопасности доступность переопределяемого метода.

Получение последней версии пакета StructureMap из NuGet (2.6.4.1) устранило проблему.

StructureMap NuGet Package

0 голосов
/ 17 ноября 2011

Вы случайно запускаете код с сетевого диска (т. Е. Папка с вашими документами перенаправлена ​​на сетевой диск)? Вы работаете в корпоративной среде в домене?

Если первое, вероятно, код выполняется в контексте безопасности интрасети. Если первое не соответствует действительности, а последнее верно, то вполне возможно, что сетевой администратор изменил политику CAS в масштабах предприятия.

...