0

私は C# .NET アセンブリ (名前: A.exe) を開発しています。このアセンブリは遅延署名してから、サード パーティの会社によって完全に署名される必要があります。署名を遅らせるために、公開鍵を使用します。アセンブリ A は、共通ライブラリの一部であるアセンブリ B.Core.dll、B.Common.dll、B.Logging.dll を参照します。B アセンブリは遅延署名されていないため、ildasm/ilasm を使用して分解し、遅延署名付きで再組み立てします。A.exe と B.Core.dll、B.Common.dll、B.Logging.dll を送信しましたが、これらは完全に署名されていますが、A を起動すると次のエラーが表示されます:

ファイルまたはアセンブリを読み込めませんでした 'Assembly B1 PublicKeyToken= A.exe

は遅延署名されたアセンブリ (Strong Name プロパティが True に設定されている) を参照しているため、この問題は A.exe に関連するものではありませんが、原因は B.Core にあると思われます。
実際、B.Core は B.Common と B.Logging を参照しますが、B.Common と B.Logging は互​​いに独立しています。
エラーの原因は、B.Core が最初に署名されていない B.Common アセンブリを使用してビルドされ、その後、3 つのアセンブリすべてを逆アセンブルして再アセンブルし、参照が変更されなかったことである可能性があります... 問題を解決するために、私が行ったことA のビルド後の手順として、4 つのアセンブリすべてを 1 つの遅延署名付きアセンブリにマージすることを考えています。うまくいくと思いますか?
B.Core は .NET MEF を使用して、A からエクスポートされたインターフェイスを動的にロードすることに注意してください。このプロセスに問題はありますか?

よろしくお願いいたします。

4

1 に答える 1

0

ILMerge を使用して 4 つのアセンブリを 1 つにマージすることができたので、すべてが期待どおりに機能しました。デバッグ シンボルでさえ、単一の PDB ファイルに "マージ" されました (トリックは、B.Core.pdb、B.Common.pdb、および B.Logging.pdb をそれぞれのアセンブリの同じフォルダーに配置することでした)。

MEFは文句を言わずに仕事をしました。

于 2016-08-17T15:20:53.777 に答える