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, я исправил эту проблему следующим образом:

  1. Открытие свойств проекта рассматриваемого проекта ClickOnce
  2. Открытие вкладки "Безопасность"
  3. Изменение настроек доверия на "Это приложение с частичным доверием"
  4. Изменение настроек доверия обратно на "Это приложение с полным доверием"

Надеюсь, это поможет кому-то еще!

Вам может понадобиться добавить следующее в ваш файл 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 еще раз, чтобы посмотреть, работает ли он.

Другие вопросы по тегам