ILMerge をコードで使用し、次のスニペットを使用してマージされた .exe (Windows コンソール アプリケーション) を取得します。
var ilMerge = new ILMerge();
ilMerge.SetInputAssemblies(files);
ilMerge.OutputFile = outputFile;
ilMerge.TargetKind = ILMerging.ILMerge.Kind.Exe;
ilMerge.DebugInfo = true;
ilMerge.SetTargetPlatform("v4", "C:\Windows\Microsoft.NET\Framework64\v4.0.30319");
ilMerge.Closed = true;
ilMerge.Merge();
マージされたアセンブリの1つでそのようなことをするまで、魅力のように機能しました:
Type[] tlist = Assembly.GetEntryAssembly().GetTypes();
これはReflectionTypeLoadExceptionをスローします
この例外には、「LoaderExceptions」と呼ばれる配列が含まれており、次のメッセージを持つ単一のLoaderExceptionで満たされています
"Could not load type '<>c__DisplayClass38' from assembly 'test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'CleanWhitespace' has no implementation (no RVA)
CleanWhitespace は、マージしたアセンブリの 1 つの静的関数であり、特別なことは何もしません...
マージされた.exeで直接呼び出しても問題ありません
...を使用して同じ例外がスローされます
Assembly.GetCallingAssembly()
Assembly.GetExecutingAssembly()
Assembly.GetAssembly();
何が起こっている ?私が間違っていることの助けはありますか?
ここでちょっと困惑…