2

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();

何が起こっている ?私が間違っていることの助けはありますか?

ここでちょっと困惑…

4

0 に答える 0