DLL ILMerge: assemblage non fusionné correctement, toujours répertorié comme référence externe

Dans le processus de construction d’un outil .NET C #, j’utilisais ILMerge pour fusionner les assemblys en un seul fichier .exe.

J’ai récemment ajouté une nouvelle bibliothèque de classes et maintenant, ILMerge échoue. Je me suis souvenu de lui dire de fusionner dans la nouvelle DLL!

Il me donne maintenant cette erreur, que je ne comprends pas vraiment:

ILMerge.Merge: l’assemblage ‘DataObjects’ n’a pas été fusionné correctement. Il est toujours répertorié en tant que référence externe dans l’assembly cible.

Toutes les références d’assemblage que j’ai réalisées à l’aide de références de “projet” n’ont pas échoué par le passé.

Quelqu’un peut-il expliquer cette erreur pour moi, ou suggérer une solution de contournement s’il vous plaît?

Je devais utiliser l’argument /closed . Selon les documents officiels:

Fermé

Lorsque cette option est définie avant d’appeler Merge, la “fermeture transitive” des assemblys en entrée est calculée et ajoutée à la liste des assemblys en entrée. Un ensemble est considéré comme faisant partie de la fermeture transitive s’il est référencé, directement ou indirectement, à partir de l’un des ensembles d’entrée spécifiés à l’origine et s’il comporte une référence externe à l’un des ensembles d’entrée, ou à l’un des ensembles possédant une telle référence. . Compliqué, mais c’est la vie …

J’ai reçu un message d’erreur similaire lors de la tentative de publication d’une application Web associant toutes les sorties à un seul assemblage:

Une erreur s’est produite lors de la fusion des assemblys: ILMerge.Merge: l’assembly cible se présente comme une référence externe.

Cela se produit si le nom d’assembly avec lequel vous fusionnez correspond au nom d’assembly de l’application Web sous Properties > Application . Changer le nom de l’assembly de sortie devrait résoudre le problème.

J’ai eu cette erreur et il a fait allusion à la référence Microsoft.Xrm.Sdk que je fusionnais dans le dll simple. Le problème a été résolu lorsque j’ai défini une autre référence, Microsoft.Xrm.Sdk.Deployment, à fusionner également dans la dll. La chose drôle est dans un projet séparé j’ai eu la fusion de la 1ère référence et la 2ème DLL de déploiement ne fusionnant pas et il ne s’est pas plaint du tout.