6/10/2010 18:29 El Bruno

[MSBUILD] Utilizando ensamblados con dependencias en tiempo de ejecución en Custom Tasks en MSBuild

 image47dd1de4

Buenas,

cuando creas una Custom Task para MSBuild, es probable que en algún momento te tientes de utilizar otros ensamblados dentro de la misma. Esto que se soluciona de una forma simple en aplicaciones .Net, en MSBuild puede ser un tanto complicado ya que el control que tenemos sobre el host de ejecución (MSBuild) no es bastante pobre.

Supongamos el siguiente escenario, donde una tarea llamada TaskFour utiliza un componente para realizar una suma (líneas 13 y 14):

   1: using Microsoft.Build.Utilities;
   2: using Microsoft.Build.Framework;
   3: namespace ElBruno.MsBuild
   4: {
   5:     public class TaskFour : Task
   6:     {
   7:         [Output]
   8:         public int AddResult { get; set; }
   9:         public int FirstArgument { get; set; }
  10:         public int SecondArgument { get; set; }
  11:         public override bool Execute()
  12:         {
  13:             var m = new MsBuildSample.Math();
  14:             AddResult = m.Add(FirstArgument, SecondArgument);
  15:             return true;
  16:         }
  17:     }
  18: }

 

Si luego incluimos esta tarea en un proyecto de MSBuild (línes 3 y 4), e invocamos a la misma (líneas 6 y 8)

   1: <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
   2:          InitialTargets="Target1">
   3:   <UsingTask TaskName="ElBruno.MsBuild.TaskFour"
   4:              AssemblyFile="c:\srcBruno\Agile01\MsBuild Tests\Sample 04\bin\Debug\ElBruno.MsBuild.dll" />
   5:   <Target Name="Target1">
   6:     <TaskFour FirstArgument="2" SecondArgument="2">
   7:       <Output TaskParameter="AddResult" PropertyName="AddResult" />
   8:     </TaskFour>
   9:     <Message Text="Resultado: $(AddResult)"></Message>
  10:   </Target>
  11: </Project>

podemos encontrarnos con el siguiente error en tiempo de ejecución:

image

donde básicamente podemos ver que la CustomTask FourTask no encuentra el ensamblado MsBuildSample.

En este caso, en el directorio que se utiliza para importar la tarea (líneas 3 y 4), vemos que no está el ensamblado MsBuildSample.

image

Si copiamos el ensamblado en la misma ruta

image

 

y ejecutamos el proyecto, el mismo ya ejecuta correctamente.

image

 

Pues bien, en este caso la recomendación es intentar tener en un único directorio todos los ensamblados de las Custom Tasks y de las dependencias de los mismos para los proyectos de MSBuild. En TFS esto cambia un poco … pero esto es para otro post.

 

Saludos @ Here

El Bruno

   

Archivado en: ,,,
Comparte este post:

# [MSBUILD] Recopilatorio de enlaces para comenzar a conocer MSBuild (II)

Thursday, October 28, 2010 8:40 AM by El Bruno

Buenas, actualización de la lista de enlaces para dar los primeros pasos con MSBuild . Cómo empezar

# [#MSBUILD] Recopilatorio de enlaces para comenzar a conocer MSBuild (III)

Tuesday, September 27, 2011 9:10 PM by El Bruno

Buenas, actualización de la lista de enlaces para dar los primeros pasos con MSBuild . Cómo

# [#MSBUILD] Recopilatorio de enlaces para comenzar a conocer MSBuild (III)

Wednesday, September 28, 2011 8:34 PM by El Bruno

Buenas, actualización de la lista de enlaces para dar los primeros pasos con MSBuild . Cómo