2010-06-20 5 views
0

J'ai une solution VS (.sln) qui a la structure suivante.Références ILMerge et Project

  • Projet A
  • Projet B (contient référence au projet A, ainsi que les références aux assemblées 3ème partie comme NHibernate, StructureMap, etc.)

Je veux utiliser ILMerge pour rouler la 3ème partie assemblys dans le ProjectB.dll. Cependant, je ne veux pas fusionner ProjectA.

J'ai utilisé la procédure surlignée here. Cela a fonctionné parfaitement pour moi en ce qui concerne la fusion des assemblées de tiers. Toutefois, j'obtiens toujours cette erreur lors de la construction de ProjectB:

Une exception s'est produite lors de la fusion: La référence d'assembly non résolue n'est pas autorisée: ProjectA.

Je ne spécifie pas explicitement que ProjectA soit fusionné. En d'autres termes, je ne dis pas vrai pour ce projet. Comment obtenir IlMerge pour ignorer ProjectA? En passant, ProjectA est une référence de projet, pas une référence d'assemblage direct.

Merci!

Répondre

4

Utilisez l'argument /lib pour ILMerge, en passant le répertoire contenant ProjectA.dll.

Plus précisément (en supposant que la plate-forme cible de ProjectB est le profil client .NET 4.0):

ILMerge.exe /out:MasterDll.dll 
      /targetplatform:v4,"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client" 
      /lib:ProjectA\bin\Release 
      ProjectB\bin\Release\ProjectB.dll 
      Libraries\NHibernate\NHibernate.dll 
      Libraries\StructureMap\StructureMap.dll 
      ... 
0

Pour 4.0 il suffit d'utiliser:

/targetPlatform: v4, "% ProgramFiles% \ Assemblées de référence \ Microsoft \ Framework.NETFramework \ v4.0 "