1

要点を正しく説明しましょう。

主な用途:

C#(4.0)、AnyCPU。

としょうかん:

C ++/CLIで記述されたネイティブ.dllのラッパー。2つのバージョンでコンパイルされています。x86とx64、どちらも同じ.snkキーで署名されています(この回避策を使用)

制限:

最終的に、x86およびx64プラットフォームには単一の配布パッケージが必要です。他の厳密に名前が付けられたライブラリへの参照のため、メインアプリケーションには厳密な名前が必要です。マネージドC#とP / Invokeを使用してライブラリを書き直すことは、絶対的な最後の方法です。

問題:

メインアプリケーションがコンパイル時に、実行時に必要なライブラリのバージョン(x86またはx64)を参照している限り、これはすべて正常に機能しています。

ライブラリの署名が参照されているものから変更されるため、同じコンパイル済み出力の移動(およびインストール中にライブラリを正しいプラットフォームバージョンと交換する)は機能しません。

強い名前のないテストアプリケーションでは、必要に応じてそれらを切り替えることができます。

質問:

設定された制限内でx86ライブラリとx64ライブラリの切り替えを有効にする方法はありますか、または強い名前付けにより、ライブラリの書き換え以外の可能な解決策が妨げられていますか?

正しい.dllを見つけること(ここで説明)ではなく、見つかったら.dllをロードできるかどうかについての質問であることを明確にしておきます。

4

1 に答える 1

1

@Damien_The_Unbelieverのコメントは私に考えさせられました、そして彼は強い名前が同じであるという点で正しいです、そしてそれは実際の問題ではありませんでした。

ライブラリの2つのバージョンの間に別の違いが見つかりました。出力名はとに設定されましnnn.dllnnnx64.dll。両方が同じ出力名を持つように変更すると、魔法のようにすべてが機能します。

おそらく誰かがそのような設定が重要である理由を知っていますが、私は確かに知りません。

于 2012-08-13T17:10:14.897 に答える