System.MethodAccessException: попытка прозрачного метода безопасности для доступа к критическому методу безопасности завершается неудачно во всех приложениях
Здравствуйте и спасибо заранее за помощь, я знаю, что этот вопрос или подобные вопросы были опубликованы, часто с особым отношением к приложениям MVC 3. Тем не менее, я получаю это сообщение об ошибке всякий раз, когда я пытаюсь запустить любое приложение из Visual Web Developer Express 2010 с использованием целевой платформы.net 4.0.
Точное сообщение об ошибке:
Попытка прозрачного для безопасности метода "System.Runtime.Diagnostics.DiagnosticTrace..ctor(System.String, System.Guid)" для доступа к критическому методу безопасности "System.Runtime.Diagnostics.EtwDiagnosticTrace..ctor(System.String, System.Guid).) 'не удалось'.
Сборка 'System.ServiceModel.Internals, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35' помечена с помощью AllowPartiallyTrustedCallersAttribute и использует модель прозрачности безопасности уровня 2. Прозрачность уровня 2 приводит к тому, что все методы в сборках AllowPartiallyTrustedCallers становятся прозрачными для безопасности по умолчанию, что может быть причиной этого исключения.
Трассировки стека:
[MethodAccessException: Attempt by security transparent method 'System.Runtime.Diagnostics.DiagnosticTrace..ctor(System.String, System.Guid)' to access security critical method 'System.Runtime.Diagnostics.EtwDiagnosticTrace..ctor(System.String, System.Guid)' failed.
Assembly 'System.ServiceModel.Internals, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is marked with the AllowPartiallyTrustedCallersAttribute, and uses the level 2 security transparency model. Level 2 transparency causes all methods in AllowPartiallyTrustedCallers assemblies to become security transparent by default, which may be the cause of this exception.]
System.Runtime.Diagnostics.DiagnosticTrace..ctor(String traceSourceName, Guid etwProviderId) +24
System.ServiceModel.Activation.FxTrace.InitializeTracing() +90
System.ServiceModel.Activation.FxTrace.get_Trace() +84
System.ServiceModel.ServiceHostingEnvironment.EnsureInitialized() +59
System.ServiceModel.ServiceHostingEnvironment.OnEnsureInitialized(Object state) +4
System.ServiceModel.AspNetPartialTrustHelpers.PartialTrustInvoke(ContextCallback callback, Object state) +52
System.ServiceModel.ServiceHostingEnvironment.SafeEnsureInitialized() +65
System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +58
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +143
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
Я полностью растерялся здесь. Если я создаю какое-либо простое приложение с нуля и пытаюсь запустить его, даже если ничего не добавлено, я получаю этот экран ошибок. Я попытался удалить атрибут target framework="4.0" из
<compilation debug="true" targetFramework="4.0" />
пометить и запустить его без результатов. Я попытался удалить этот атрибут и добавить
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0.50727"/>
<supportedRuntime version="v4.0.30319"/>
</startup>
как предложено в этой теме: BadImageFormatException - Можно ли указать, какая версия.NET используется для запуска исполняемого файла? Я попытался восстановить установку.Net 4.0 framework, потому что слышал, что это может быть проблемой. Вчера вечером я только что установил визуальный веб-разработчик, чтобы работать над проектом, который я перенес из Microsoft Visual Studio 2010, потому что истек срок действия моей пробной версии, и мы будем благодарны за любую помощь или возможные обходные пути.
4 ответа
Я испытал эту проблему сегодня. Насколько я понимаю, проблема в том, что сборки.NET 4.0 теперь по умолчанию критически важны для безопасности. Прозрачный для безопасности код не может вызвать критический код безопасности.
Решение в моем случае было связано с AllowPartiallyTrustedCallersAttribute
определены только на нескольких сборках в моем приложении. Мне пришлось либо удалить этот атрибут из всех сборок, либо добавить его ко всем.
Признаться, я очень опоздал на вечеринку здесь, но в VS2013, и у меня возникла та же проблема с проектом.NET 4.5.1 ClickOnce, я исправил эту проблему следующим образом:
- Открытие свойств проекта рассматриваемого проекта ClickOnce
- Открытие вкладки "Безопасность"
- Изменение настроек доверия на "Это приложение с частичным доверием"
- Изменение настроек доверия обратно на "Это приложение с полным доверием"
Надеюсь, это поможет кому-то еще!
Вам может понадобиться добавить следующее в ваш файл AssemblyInfo.cs, чтобы задействованные сборки были одинаковыми.
[assembly: SecurityTransparent()]
По-видимому, один потенциальный обходной путь, который по крайней мере позволил мне запускать приложения в Visual Web Developer, заключался в следующем:
Удалите атрибут targetFramework="4.0" из элемента, который находится внутри элемента.
Если это приложение Silverlight, щелкните правой кнопкой мыши свойства заголовка ApplicationName.Web и выберите целевую платформу 3.5. Если это приложение asp.net, щелкните правой кнопкой мыши верхний заголовок проекта и выберите свойства, а затем установите целевую среду на 3.5.
Все это наводит меня на мысль, что это проблема с моей установкой.Net 4.0 framework. Но так как я установил и удалил, а затем установил среду.Net 4.0 по крайней мере дважды, это единственный вариант, который я могу придумать на данный момент. Если кто-то предоставит мне лучший ответ / Более постоянное решение, которое работает для меня, я отмечу это как ответ. Тем временем я попытаюсь запустить "установить другие фреймворки" и переустановить как целевой пакет.Net 4.0, так и.Net 4.0 Runtime еще раз, чтобы посмотреть, работает ли он.