管理されていないコードを含む生のアセンブリを動的にロードするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2945080

質問

使用の例を挙げます System.data.sqlite.dll これは、管理されていないコードを使用した混合アセンブリです:これを実行する場合:

  var assembly= Assembly.LoadFrom("System.Data.SQLite.DLL")

例外はありませんが、私がこれを行う場合:

  var rawAssembly = File.ReadAllBytes("System.Data.SQLite.DLL");
  var assembly = Assembly.Load(rawAssembly);

CLRは、「検証不可能なコードに失敗したポリシーチェック(hresult:0x80131402からの例外)」を使用して、フィルロデックスをスローします。このアセンブリをChild AppDomainにロードしようとしているとしましょう。AppDomainのセキュリティをカスタマイズして、ポリシーチェックに合格できるようにするにはどうすればよいですか?

役に立ちましたか?

解決

私たちは不器用な例外メッセージの犠牲者です。アセンブリをAssembly.load(byte [])にロードすることは、管理されていないコードを含むことはサポートされていません。これがこれの主題です フィードバックアイテム.

更新:リンクされたフィードバックアイテムは、VS2012リリース時間でのクリーンアップの一部として削除されました。それの唯一の部分は、まだ回復することができるのは、別のWebページからコピーされたこのフラグメントです。

「[…]他のものは安全ではないので、ilonly画像をロードすることのみを許可します」 -

更新:archive.orgバックアップコピーに固定されたリンク。

他のヒント

問題は、CLRが通常のDLL読み込み手順を実行しないことです - DLLを別のページに個別にマッピングする、修正を調整するなど。アセンブリが生のバイトからロードされると、それらの生のバイトがメモリにマッピングされ、管理されたメタデータのみが読み取られます。この動作を変更する証拠やセキュリティ設定はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top