2012-07-29 22 views
12

Quiero llamar herramientas ejecutables como NUnit que dirijo a través NuGet en MSBuild:Obtener carpeta del paquete NuGet en MSBuild

<Target Name="Test"> 
    <CreateItem Include="$(BuildCompileDirectory)\*.Tests.*dll"> 
    <Output TaskParameter="Include" ItemName="TestAssemblies" /> 
    </CreateItem> 
    <NUnit 
    Assemblies="@(TestAssemblies)" 
    ToolPath="$(PackagesDirectory)\NUnit.2.5.10.11092\tools" 
    WorkingDirectory="$(BuildCompileDirectory)" 
    OutputXmlFile="$(BuildDirectory)\$(SolutionName).Tests.xml" /> 
</Target> 

El problema es que la carpeta de un paquetes NuGet es que contiene el número de versión del paquete . Por ejemplo, nunit-console.exe se encuentra en la carpeta packages\NUnit.2.5.10.11092\tools. Si actualizo el paquete NUnit, esta ruta cambiará y tendré que actualizar mi script MSBuild. Eso no es aceptable

MSBuild no permite comodines en directorios, así que esto no está funcionando:

ToolPath="$(PackagesDirectory)\NUnit.*\tools" 

¿Cómo puedo llamar herramientas de MSBuild sin tener que actualizar mi script de construcción cada vez que puedo actualizar un paquete NuGet?

Respuesta

12

Puede utilizar MSBuild Transforms para obtener el directorio relativo de una herramienta específica:

<ItemGroup> 
    <NunitPackage Include="$(PackagesDirectory)\NUnit.*\tools\nunit-console.exe"/> 
</ItemGroup> 

<Target Name="Test"> 
    <CreateItem Include="$(BuildCompileDirectory)\*.Tests.*dll"> 
    <Output TaskParameter="Include" ItemName="TestAssemblies" /> 
    </CreateItem> 
    <NUnit 
    Assemblies="@(TestAssemblies)" 
    ToolPath="@(NunitPackage->'%(relativedir)')" 
    WorkingDirectory="$(BuildCompileDirectory)" 
    OutputXmlFile="$(BuildDirectory)\$(SolutionName).Tests.xml" /> 
</Target> 
+1

Es "$ (PackagesDirectory)" un elemento que usted define a sí mismo? –

+0

@DavidTchepak Sí, lo es. –

+0

¿Qué sucede si la solución es grande y contiene varias versiones del mismo paquete (utilizado por diferentes proyectos)? En ese caso, puede hacer referencia a la versión incorrecta (es decir, no la especificada en el archivo "packages.config" de su proyecto). – johnnyjob

Cuestiones relacionadas