Подтвердить что ты не робот

System.MethodAccessException: попытка прозрачного метода безопасности для доступа к критическому критическому критическому методу не работает во всех приложениях

Привет и спасибо заранее за помощь, Я знаю, что этот вопрос или подобные вопросы были опубликованы, часто с особым учетом приложений MVC 3. Тем не менее, я получаю это сообщение об ошибке всякий раз, когда я пытаюсь запустить любое приложение из визуального веб-разработчика express 2010, используя целевую инфраструктуру .net 4.0.

Точное сообщение об ошибке:

Попытка прозрачным методом безопасности "System.Runtime.Diagnostics.DiagnosticTrace..ctor(System.String, System.Guid)" для доступа к критическому критическому критическиму "System.Runtime.Diagnostics.EtwDiagnosticTrace..ctor(System.String, System.Guid)" failed".

Assembly 'System.ServiceModel.Internals, Version = 4.0.0.0, Culture = neutral, 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, потому что слышал, что это может быть проблемой. Вчера вечером я только что установил визуальный веб-разработчик, чтобы работать над проектом, который я перешел из Microsoft Visual Studio 2010, потому что моя пробная версия истекла, любая помощь или возможные обходные пути будут оценены.

4b9b3361

Ответ 1

Сегодня я столкнулся с этой проблемой. Насколько я понимаю, проблема в том, что сборки .NET 4.0 теперь по умолчанию критичны для безопасности. Невозможно, чтобы прозрачный код безопасности вызывал критический код безопасности.

Решение в моем случае было связано с тем, что AllowPartiallyTrustedCallersAttribute определен только на нескольких сборках в моем приложении. Мне пришлось либо удалить этот атрибут из всех сборок, либо добавить его ко всем.

Ответ 2

Возможно, вам потребуется добавить в файл AssemblyInfo.cs следующее, чтобы связанные сборки были одинаковыми.

[assembly: SecurityTransparent()]

Ответ 3

Оцените, что я очень опаздываю на вечеринку здесь, но в VS2013 и испытываю ту же проблему с проектом .NET 4.5.1 ClickOnce, я исправил эту проблему:

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

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

Ответ 4

По-видимому, одно потенциальное обходное решение, которое по крайней мере позволило мне запустить приложения в Visual Web Developer, было следующим:

  • Удалите атрибут targetFramework = "4.0" из элемент, который находится внутри элемента.

  • Если это приложение Silverlight, щелкните правой кнопкой мыши В заголовке ApplicationName.Web выберите свойства, затем измените целевой структуры до 3.5. Если это приложение asp.net application щелкните заголовок верхнего проекта и выберите свойства, а затем установите целевой рамок до 3.5.

Все это говорит о том, что это проблема с моей установкой .Net 4.0 framework. Но поскольку я установил и удалил, а затем установил фреймворк .Net 4.0, по крайней мере, дважды, это единственный вариант, о котором я могу думать на данный момент. Если кто-то дает мне лучший ответ/более постоянное решение, которое работает для меня, я отмечу это как ответ. Тем временем я попробую запустить "установить другие фреймворки" и повторно установить как таргетинг .Net 4.0, так и .NET 4.0 Runtime еще раз, чтобы увидеть, работает ли он.