我想在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
位于文件夹packages\NUnit.2.5.10.11092\tools
中。如果我更新了NUnit包,这个路径就会改变,我必须更新我的MSBuild脚本。这是不可接受的。MSBuild不允许在目录中使用通配符,因此这并不起作用:
ToolPath="$(PackagesDirectory)\NUnit.*\tools"
我如何在更新NuGet包时无需更新生成脚本就能调用MSBuild中的工具?
PackageReference
和GeneratePathProperty="true"
。请参见 https://www.patriksvensson.se/2019/09/how-to-find-a-nuget-package-path-from-msbuild。 - Mike Rosoft