获取NuGet包文件夹中的MSBuild(Get NuGet package folder in M

2019-07-30 16:07发布

我想打电话给像NUnit的可执行工具,我的MSBuild通过的NuGet管理:

<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>

的问题是,一个的NuGet包的文件夹中包含的包的版本号。 例如nunit-console.exe是在文件夹packages\NUnit.2.5.10.11092\tools 。 如果我更新NUnit的包装这条道路会改变,我要更新我的MSBuild脚本。 这是不能接受的。

的MSBuild不允许在目录通配符,所以这是不工作:

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

我如何可以调用的MSBuild工具,而不必每当我更新NuGet包来更新我的构建脚本?

Answer 1:

您可以使用MSBuild的变换 ,以获得特定工具的相对目录:

<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>


文章来源: Get NuGet package folder in MSBuild