dotnet / ILMerge

ILMerge is a static linker for .NET Assemblies.
MIT License
1.23k stars 170 forks source link

Problem with generic types #50

Open manuel-mp opened 6 years ago

manuel-mp commented 6 years ago

Hello, I'm receiving the error at the end of the following log, with some generic types. I was able to reproduce the problem in the attached solution (please check README.txt). Thanks in advance.

ILMergeTest.zip

ILMerge version 2.14.1208.65535 Copyright (C) Microsoft Corporation 2004-2006. All rights reserved. ILMerge /log:D:\Temp\ILMergeTest\ILMergeTest\merge.log /targetplatform:v4 /out:D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTest.Merged.exe D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTest.exe D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTestLib.dll Set platform to 'v4', using directory 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319..\v4.0.30319' for mscorlib.dll Running on Microsoft (R) .NET Framework v4.0.30319 mscorlib.dll version = 4.0.0.0 The list of input assemblies is: D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTest.exe D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTestLib.dll Trying to read assembly from the file 'D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTest.exe'. Successfully read in assembly. There were no errors reported in ILMergeTest's metadata. Trying to read assembly from the file 'D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTestLib.dll'. Successfully read in assembly. There were no errors reported in ILMergeTestLib's metadata. Checking to see that all of the input assemblies have a compatible PeKind. ILMergeTest.PeKind = ILonly ILMergeTestLib.PeKind = ILonly All input assemblies have a compatible PeKind value. Using assembly 'ILMergeTest' for assembly-level attributes for the target assembly. Merging assembly 'ILMergeTest' into target assembly. Merging assembly 'ILMergeTestLib' into target assembly. Copying 2 Win32 Resources from assembly 'ILMergeTest' into target assembly. Transferring entry point 'ILMergeTest.Program.Main(System.String[])' from assembly 'ILMergeTest' to assembly 'ILMergeTest.Merged'. There were no errors reported in the target assembly's metadata. ILMerge: Writing target assembly 'D:\Temp\ILMergeTest\ILMergeTest\ILMergeTest\bin\Debug\ILMergeTest.Merged.exe'. An exception occurred during merging: Unable to cast object of type 'System.Compiler.Interface' to type 'System.Compiler.Class'. at System.Compiler.StandardVisitor.VisitTypeParameter(TypeNode typeParameter) at System.Compiler.StandardVisitor.VisitTypeParameterList(TypeNodeList typeParameters) at System.Compiler.Specializer.VisitMethod(Method method) at System.Compiler.StandardVisitor.VisitMemberList(MemberList members) at System.Compiler.Specializer.ProvideTypeMembers(TypeNode typeNode, Object handle) at System.Compiler.TypeNode.get_Members() at System.Compiler.Specializer.GetCorrespondingMember(Member member, TypeNode specializedType) at System.Compiler.Duplicator.VisitMemberReference(Member member) at System.Compiler.Duplicator.VisitMemberBinding(MemberBinding memberBinding) at System.Compiler.Duplicator.Visit(Node node) at System.Compiler.Duplicator.VisitExpression(Expression expression) at System.Compiler.StandardVisitor.VisitMethodCall(MethodCall call) at System.Compiler.Duplicator.Visit(Node node) at System.Compiler.Duplicator.VisitExpression(Expression expression) at System.Compiler.StandardVisitor.VisitExpressionStatement(ExpressionStatement statement) at System.Compiler.Duplicator.Visit(Node node) at System.Compiler.StandardVisitor.VisitStatementList(StatementList statements) at System.Compiler.StandardVisitor.VisitBlock(Block block) at System.Compiler.Duplicator.Visit(Node node) at System.Compiler.StandardVisitor.VisitStatementList(StatementList statements) at System.Compiler.StandardVisitor.VisitBlock(Block block) at System.Compiler.Duplicator.ProvideMethodBody(Method dup, Object handle, Boolean asInstructionList) at System.Compiler.Method.get_Body() at System.Compiler.Ir2md.VisitMethod(Method method) at System.Compiler.Ir2md.VisitClass(Class Class) at System.Compiler.Ir2md.VisitModule(Module module) at System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation) at System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer) at System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName) at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) at ILMerging.ILMerge.Merge() at ILMerging.ILMerge.Main(String[] args)

kOchirasu commented 3 years ago

did you ever figure out the root cause for this?

Edit: I was able to use ILRepack and it did not have this problem.

manuel-mp commented 3 years ago

@kOchirasu never figured out. I simply abandoned the idea to merge certain projects, since I never received any help on this issue and I haven't the right know-how to solve it by myself. Anyway, thanks for the tip, I'll certainly give ILRepack a try!

EDIT: @kOchirasu I've tried ILRepack, no problem at all! I already migrated successfully every project requiring merge on it. Thanks a lot for your suggestion!