2015-09-18 3 views
2

Nous avons une étape sur notre serveur de construction qui fusionne nos DLL en un pour un transport facile.ILMerge erreur: La clé doit être supérieure à 0

Dans notre environnement d'assurance qualité, nous obtenons l'erreur suivante lors de l'exécution ILMerge

An exception occurred during merging: 
Key needs to be greater than 0. 
Parameter name: key 
    at System.Compiler.TrivialHashtable.get_Item(Int32 key) 
    at System.Compiler.Ir2md.GetTypeSpecIndex(TypeNode type) 
    at System.Compiler.Ir2md.GetMemberRefIndex(Member m) 
    at System.Compiler.Ir2md.GetMethodToken(Method m) 
    at System.Compiler.Ir2md.VisitConstruct(Construct cons) 
    at System.Compiler.Ir2md.VisitAssignmentStatement(AssignmentStatement assignment) 
    at System.Compiler.Ir2md.VisitBlock(Block block) 
    at System.Compiler.Ir2md.VisitBlock(Block block) 
    at System.Compiler.Ir2md.VisitMethodBody(Method method) 
    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) 

Toute idée comment cela peut être résolu? Nous avons trop de code et trop de DLL pour que ce soit utile pour moi de fournir plus d'informations sur les DLL que nous essayons de fusionner.

Le code fusionné a été dérivé de notre ligne de développement ce matin - le code est identique à la ligne de développement, qui est capable de ILMerge juste très bien.

L'erreur de fusion se produit sur nos machines locales ainsi que sur notre serveur de génération.

Je sais que ce n'est pas grand chose à faire, mais c'est tout ce que j'ai! Après la génération du code en mode Release, la fusion IL fonctionne correctement.

Répondre

2

Pas exactement une réponse, mais vous pouvez donner un essai à ILRepack, il a une syntaxe identique à ILMerge, mais le code est open-source, et l'exception (le cas échéant) peut être plus explicite (pas de garantie cependant) .

De plus, si votre assembly cible est signé, peut-être que la 'clé' fait référence à sa clé de signature d'une façon ou d'une autre, au cas où cela vous aiderait à vous mettre en piste.

+0

merci pour le lien! Je vais essayer! – DLeh

+0

qui était capable de fusionner les DLL qui échouaient, et c'est un outil beaucoup plus agréable que ILMerge. – DLeh

+0

content que ça a aidé! – Gluck

0

Ma réponse est un peu datée, mais j'ai rencontré le même problème, peut-être que cela aide quelqu'un.

J'ai eu l'exception, ayant l'action ILMerge dans l'événement post-construction dans Visual Studio. Je suis conscient à quel point cela semble stupide, mais la solution remplaçait tous delegates, Action et Func<> avec des méthodes normales. Le problème a également disparu lors de la construction en mode de libération