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