2012-07-29 19 views
12

chcę zadzwonić narzędzi wykonywalnych jak NUnit które zarządzają poprzez Nuget w MSBuild:Get folderu pakietu Nuget w 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> 

Problemem jest to, że folder o tematyce pakietów Nuget jest zawierający numer wersji pakietu . Na przykład nunit-console.exe znajduje się w folderze packages\NUnit.2.5.10.11092\tools. Jeśli zaktualizuję pakiet NUnit, ta ścieżka się zmieni i będę musiał zaktualizować mój skrypt MSBuild. To nie do przyjęcia.

MSBuild nie pozwala Znaków w katalogach, tak to nie działa:

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

Jak mogę zadzwonić MSBuild narzędzi bez konieczności zaktualizować skrypt kompilacji ilekroć zaktualizować pakiet Nuget?

Odpowiedz

12

Można użyć MSBuild Transforms aby uzyskać względną katalogu określonego narzędzia:

<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

to „$ (PackagesDirectory)” element zdefiniowaniu siebie? –

+0

@DavidTchepak Tak, jest. –

+0

Co, jeśli rozwiązanie jest duże i zawiera wiele wersji tego samego pakietu (używanych przez różne projekty)? W takim przypadku możesz odwołać się do niewłaściwej wersji (tj. Nie tej, która jest określona w pliku "packages.config" twojego projektu. – johnnyjob

Powiązane problemy