2

私はC#ライブラリを持っており、いくつかのアセンブリは私たちといくつかのサードパーティによって開発されています。oすべてを単一のアセンブリファイルに入れる必要があります。

ILMergeを使用してすべてをマージしようとすると、次のエラーが発生しました。

マージ中に例外が発生しました:

ILMerge.Merge:アセンブリ'TestLibrary'は、マネージコードのみを含むものとしてマークされていません。(/ zeroPeKindオプションの使用を検討してください。ただし、最初にドキュメントを読んでください!)em ILMerging.ILMerge.Merge()em ILMerging.ILMerge.Main(String [] args)

マージからTestLibraryを削除すると、正常に機能します。ただし、プロジェクトを機能させるために、TestLibraryを個別に参照し、useLegacyV2RuntimeActivationPolicy="true"を有効にします。

そこで、もう少し調査した後、JeffreyRichterを使用してEmbeddedResourcesを使用してみることにしまし

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
   String resourceName = "AssemblyLoadingAndReflection." +
      new AssemblyName(args.Name).Name + ".dll";
   using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
      Byte[] assemblyData = new Byte[stream.Length];
      stream.Read(assemblyData, 0, assemblyData.Length);
      return Assembly.Load(assemblyData);
   }
};

リソースバイトをロードしますが、Assembly.Loadで失敗し、プログラムの形式が正しくないと言っています。

TestLibraryは、C ++.Netv1.0ライブラリです。

4

1 に答える 1

2

ILMerge は、ネイティブ コードを含むアセンブリを処理できません。使用する前に実行時に dll を抽出するか、dll を出荷する必要があります。これは、2つのサードパーティのdllのC++を使用してILMergeでも説明されています

于 2012-11-07T19:35:20.253 に答える