web-dev-qa-db-ja.com

アセンブリは部分的に信頼された呼び出し元を許可しません

ライブラリを変更して、部分的に信頼された呼び出し元を許可するにはどうすればよいですか?

次のエラーが発生します。

「/」アプリケーションでのサーバーエラー。

セキュリティ例外

説明:アプリケーションが、セキュリティポリシーで許可されていない操作を実行しようとしました。このアプリケーションに必要な権限を付与するには、システム管理者に連絡するか、構成ファイルでアプリケーションの信頼レベルを変更してください。

例外の詳細:System.Security.SecurityException:そのアセンブリは部分的に信頼された呼び出し元を許可しません。

ソースエラー:[関連するソース行がありません]

ソースファイル:App_Web_kzj7vfkn.2.cs
行:0

編集する

問題をもう少し見てみると、問題の原因はSystem.Web.UI.ClientScriptManagerのようです

15
Andreas

ライブラリのソースにアクセスできると仮定します。

  • 厳密な名前を付けようとしているライブラリを指定します。
  • 呼び出すライブラリに [[Assembly:AllowPartiallyTrustedCallers] を追加します。
  • ライブラリへのアクセス許可を設定するコードグループを作成する

かなり良い詳細な説明が表示されます こちら 理解を深めるために下部のリンクもお読みください。

アセンブリではなく問題である可能性がありますが、部分的に信頼された呼び出し元を許可しない別のアセンブリを呼び出しています。実行時に fuslogvw を使用して、問題を引き起こしているアセンブリを見つけることができます。これが問題であり、このアセンブリのソースがある場合は、 [Assembly:AllowPartiallyTrustedCallers] 属性をそのアセンブリに適用する必要があります。ソースがない場合、私が知っている唯一のオプションは面倒なライブラリを置き換えることです。

19
KeesDijk

私の場合 -

これは同様の問題を解決しました:

私は自分のdllプロパティに行かなければならなかった、
ブロック解除ボタンを押します: enter image description here

4
banana

私はこれが非常に古い質問であることを知っていますが、この問題に遭遇し、承認された回答とは異なる方法を使用して修正できました。これはエラーメッセージを検索するときのGoogleでの最初の結果なので、役に立つと思います自分の解決策を共有した場合、他の人に。

私が遭遇していた問題は、ハードウェアと統合しようとしたときに発生しました。ハードウェアには、DLLをGACに登録する独自のインストーラーがありました。インストールされたDLLには2つの依存DLLがありましたが、何らかの理由でインストーラーが実行されたときに、依存DLLを登録していませんでした。

基本的に、シナリオは、エントリDLLがGACに登録され、その2つの依存DLLはGACに登録されていませんが、実行可能ファイルの隣に存在していました。

プログラムを実行してハードウェアを使用しようとすると、プログラムは実行可能ファイルの横にあるエントリDLLを探していましたが、見つかりませんでした。次に、プログラムはGACに移動し、エントリDLLを見つけます。ハードウェアのDLLに入ると、最終的にGACにはないが実行可能ファイルの隣にある依存関係DLLを使用しようとします。 GACから実行可能ファイルの横にあるDLLを呼び出すと、部分的に信頼された呼び出し元エラーがスローされていました。

これを解決するには、実行可能ファイルの横にエントリDLLのコピーを配置しました。

どのシナリオが機能し、何がセキュリティエラーの原因となるのかについて知りたくて、これらが期待どおりに機能するシナリオであることがわかりました。

  1. 実行可能ファイルの横にある3つのDLLすべて。
  2. GACの3つのDLLすべて。

一貫して失敗した唯一のシナリオは、いずれかの層がGAC内にあり、依存関係DLLのいずれかがGACの外にある場合でした。

失敗したシナリオ#1:

  1. GACのエントリDLL
  2. DLL#2およびDLL#3 Exeの隣

    • 障害のあるDLLとしてDLL#2の配置に失敗します。

失敗したシナリオ#2:

  1. GACのエントリDLLおよびDLL#2
  2. エグゼの隣のDLL#3

    • 障害のあるDLLとしてDLL#3の配置に失敗します。

失敗したシナリオ#3:

  1. GACのエントリDLLおよびDLL#3
  2. Exeの隣のDLL#2

    • (予測可能)障害のあるDLLとしてDLL#2の配置に失敗します。

私はそれをテストしませんでしたが、エントリDLLおよびDLL#3が実行可能ファイルの隣にあり、DLL 2はGACに存在していたので、DLL#3が問題として特定されていたため、エラーが発生しました。

4
Mike_OBrien

回答が遅いのはわかっていますが、将来の訪問者を助けるために、もう1つ回答を追加したいと思います。

私のシナリオ

CCavenue暗号化asp.netが原因でこの問題が発生したとき、私はMCPG.CCA.UtilアプリケーションにCCavenue支払いゲートウェイを実装していました

web.configに次の行を追加してください

<system.web>

  <trust level="Full" />

</system.web>
4
Vikas Bansal

使用しているライブラリとセットアップに応じて、別の解決策を次に示します。「ローカル」ドライブからプログラムを実行していることを確認してください。

VMホストとゲストOS間で共有されているフォルダーで、exeの横にライブラリdllが存在するフォルダーでプログラムを実行すると、このエラーメッセージが発生しました。フォルダーをローカルドライブにコピーします。ゲストOSが問題を修正しました。

これが信頼の問題を引き起こすことは理にかなっていますが、より有用なエラーメッセージはニースです。

0
Tydaeus

私も同様の問題を抱えており、上記の答えをすべて試しましたが、どれもうまくいきませんでした。どうやら私のケースは違っていた、私の場合、フレームワークは3.5でした。私はそれを4以上に変更し、うまくいきました。

0
Murtaza Munshi