web-dev-qa-db-ja.com

System.MethodAccessException:すべてのアプリケーションでセキュリティクリティカルメソッドにアクセスするためのセキュリティ透過メソッドによる試行が失敗する

こんにちは、助けてくれてありがとう、私はこの質問または同様の質問が頻繁にMVC 3アプリケーションに関連して投稿されていることを知っています。ただし、.net 4.0ターゲットフレームワークを使用してVisual Web Developer Express 2010内からアプリケーションを起動しようとすると、常にこのエラーメッセージが表示されます。

正確なエラーメッセージは次のとおりです。

セキュリティトランスペアレントメソッド '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 = 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

ここで私は完全に途方に暮れています。基本的なアプリケーションだけを最初から作成し、何も追加しなくても起動しようとすると、このエラー画面が表示されます。ターゲット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から移行したプロジェクトで作業するために、昨晩ビジュアルWeb開発者をインストールしました。ヘルプや潜在的な回避策をいただければ幸いです。

18
Christian

今日、この問題を経験しました。私が理解している限り、問題は.NET 4.0アセンブリがデフォルトでsecurity criticalになっていることです。セキュリティ透過コードがセキュリティクリティカルコードを呼び出すことはできません。

私の場合の解決策は、アプリケーションのいくつかのアセンブリでのみAllowPartiallyTrustedCallersAttributeを定義することに関連していました。この属性をすべてのアセンブリから削除するか、すべてのアセンブリに追加する必要がありました。

16
Drew Noakes

私はここのパーティーに非常に遅れていますが、VS2013で.NET 4.5.1 ClickOnceプロジェクトで同じ問題に苦しんでいることを感謝します。

  1. 問題のClickOnceプロジェクトのプロジェクトプロパティを開く
  2. [セキュリティ]タブを開く
  3. 信頼設定を「これは部分信頼アプリケーションです」に変更します
  4. 信頼設定を「これは完全信頼アプリケーションです」に戻す

これが他の誰かを助けることを願っています!

2
Rob

関連するアセンブリが同じになるように、AssemblyInfo.csファイルに以下を追加する必要がある場合があります。

[Assembly: SecurityTransparent()]
2
Marcel Balcarek

どうやら、少なくとも私がVisual Web Developerでアプリケーションを起動できるようにした潜在的な回避策の1つは次のとおりです。

  • 要素内にある要素からtargetFramework = "4.0"属性を削除します。

  • Silverlightアプリケーションの場合ApplicationName.Webヘッダーを右クリックしてプロパティを選択し、ターゲットフレームワークを3.5に変更します。 asp.netアプリケーションの場合は、上部のプロジェクトヘッダーを右クリックしてプロパティを選択し、ターゲットフレームワークを3.5に設定します。

これらすべてが、.Net 4.0フレームワークのインストールに問題があることを示唆しています。しかし、私は.Net 4.0フレームワークをインストールしてアンインストールしてから、少なくとも2回インストールしたので、これが現時点で考えられる唯一のオプションです。誰かが私にもっと良い反応/より永続的な解決策を提供してくれたら、それを答えとしてマークします。それまでの間、「他のフレームワークのインストール」を起動し、.Net 4.0ターゲットパックと.Net 4.0ランタイムの両方をもう一度再インストールして、機能するかどうかを確認します。

0
Christian