2012-07-29 20 views
12

voglio chiamare strumenti eseguibili come NUnit che gestisco tramite NuGet in MSBuild:Get cartella del pacchetto NuGet in 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> 

Il problema è che la cartella di un pacchetti Nuget è che contiene il numero di versione del pacchetto . Ad esempio, nunit-console.exe si trova nella cartella packages\NUnit.2.5.10.11092\tools. Se aggiorno il pacchetto NUnit questo percorso cambierà e devo aggiornare il mio script MSBuild. Questo non è accettabile.

MSBuild non consente caratteri jolly nelle directory, quindi questo non sta funzionando:

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

Come posso chiamare strumenti in MSBuild senza dover aggiornare il mio script di build ogni volta che aggiorno un pacchetto NuGet?

risposta

12

È possibile utilizzare MSBuild Transforms per ottenere la relativa directory di uno strumento specifico:

<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

Is "$ (PackagesDirectory)" un elemento che hai definito te stesso? –

+0

@DavidTchepak Sì, lo è. –

+0

Cosa succede se la soluzione è grande e contiene più versioni dello stesso pacchetto (utilizzato da diversi progetti)? In tal caso, puoi fare riferimento alla versione errata (ad esempio, non quella specificata nel file "packages.config" del tuo progetto. – johnnyjob

Problemi correlati