2

だから、私は自分のプロジェクト用にカスタマイズされたインストーラーを作成しています。必要なのは、すべてを1つのファイルに「パック」することでした。(ILMergeや.NETZを使用できなかったのは、含まなければならないものの1つが管理されていない(それがどのように呼ばれたのか?)アセンブリだったためです。)とにかく、私は主にここから多くのものを読み、人々は言っていましたこれをする:

  • .dllを埋め込みリソースとして追加します。
  • AssemblyResolveメソッドにハンドラーを追加して、アプリケーションがアセンブリを見つけられないときに起動するようにします
  • そのハンドラーで、Assembly.Load()が使用できるバイト配列に入力ストリームを転送する関数を使用して、メモリから.dllをロードするようにします。

私はすべてのことを行い、コードが正しくコンパイルできるように.dllへの通常の参照を追加しました。ただし、アプリケーションがあるディレクトリから.dllファイルを削除して実行しようとすると、[ファイルまたはアセンブリの読み込みに失敗しました...]ダイアログ(またはそれが何であれ、私が何を話しているのかがわかります) )ポップアップが表示され、.dllを読み込めなかったことが通知されますが、AssemblyResolveEventHandlerのそのバイト配列からロードするように明示的に指示しました。
これが以前に答えられたものであるならば、すみません。推奨される同様の質問を見ると、これに対する答えはわかりません。
関連している可能性があることがわかったのは、「セキュリティの高いコンテキストでない限り、C#ではバイトからの読み込みが許可されない」ということだけです。誰かが何かを知っている場合は、このステートメントを確認/拒否して、「高セキュリティコンテキスト」とは何かを教えてください。確かに、私は複雑なものに精通していません。:)

お時間を割いてお答えいただきありがとうございます!

4

1 に答える 1

1

アセンブリはマネージ dll の別名です。ネイティブ dll は最終的に AssemblyResolve ビットに収まりません。起動時に埋め込み dll をディスクに保存する以外のオプションがあるかどうかはわかりませんが、OS (管理されていない dll の読み込みを担当) に埋め込み dll を見つける方法を伝えるオプションは見つかりませんでした。

于 2012-07-01T21:43:02.340 に答える