15/7/2010 16:32
El Bruno
[MSBUILD] HowTo: Resolver referencias en compilación desde directorios externos, desde la GAC (o desde Twitter ^^ !!)

Buenas,
uno de los problemas más usuales con los que solemos encontrarnos en los entornos de compilación, es definir una forma para que las compilaciones resuelvan las dependencias con las que se compilan las soluciones. Si eres una persona organizada y utilizas referencias con paths relativos almacenados en el Source Control (por ejemplo: ..\..\References\EntLib.Common.dll); no tendrás ningún problemas. Pero si en cambio tienes una ensalada de referencias repartidas por directorios de red, o en la GAC, pues el MSBuild puede chillar un poco.
Para estos casos, lo ideal es conocer un poco como funciona la tarea ResolveAssemblyReference, que es una tarea que ejecuta MSBuild en tiempo de compilación para resolver las referencias con las que compila un proyecto. No voy a entrar en detalle sobre esta tarea, ya que el link de la MSDN explica cuales son los parámetros con los que trabaja, pero si comentar que para resolver referencias en ubicaciones externas, es posible utilizar AdditionalReferencePath para esto.
Por ejemplo, si tenemos dlls repartidas por varios sitios, un ejemplo como el siguiente puede sernos de ayuda:
1: <!-- Paths adicionales que se utilizaran para la compilacion -->
2: <ItemGroup Label="Additional Reference Path">
3: <AdditionalReferencePath Include="\\SERVER\referencias\" />
4: <AdditionalReferencePath Include="C:\MasReferencias\" />
5: <AdditionalReferencePath Include="C:\LasReferenciasQueFaltan\" />
6: </ItemGroup>
En el ejemplo anterior, el compilador al momento de intentar resolver un ensamblado, intentará obtenerlo desde estas ubicaciones, respetando el orden con el que las hemos definido. Y si no lo encuentra, recién en este momento lo buscará en la GAC. Estos 2 puntos son importantes ya que si tienes ensamblados “repetidos” (un escenario que aborrezco, pero que es muy frecuente), pues ve tu a saber con que versión estás compilando.
Pequeño tip, que me apunto para no olvidarme en el futuro 
Saludos @ Here
El Bruno
Archivado en: Team Foundation Server,Build,HowTo
Comparte este post: