質問

MSBUILDのNUGETで管理するNUnitのような実行可能ツールを呼び出したい:

<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はFolder packages\NUnit.2.5.10.11092\toolsにあります。NUnitパッケージを更新した場合、このパスは変更され、MSBuildスクリプトを更新する必要があります。それは許容できません。

msbuildはディレクトリ内のワイルドカードを許可しないので、これは機能しません。

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

NUGETパッケージを更新するたびにビルドスクリプトを更新しなくてもMSBUILDでツールを呼び出すことができますか?

役に立ちましたか?

解決

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top