私は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ライブラリです。