2

我已将xunit.runners包添加到解决方案中。当前版本是 1.9.1,所以我在 MSBuild 项目文件中硬编码了可执行文件的路径:

<StartAction>Program</StartAction>
<StartProgram>$(MSBuildProjectDirectory)\..\..\Packages\xunit.runners.1.9.1\tools\xunit.gui.clr4.exe</StartProgram>
<StartArguments>"$(MSBuildProjectDirectory)\$(OutPutPath)$(AssemblyName).dll"</StartArguments>

(题外话:使用此配置,F5 启动 xUnit GUI 运行程序,我可以调试特定的单元测试。)

我知道每次更新 Nuget 包时,都会忘记更改路径。更改路径是一个小麻烦,因为我必须卸载项目,编辑文件,然后重新加载项目。

无论软件包的实际版本如何,如何启动可执行文件?我可以xunit.runners.*在 MSBuild 中使用通配符命名的文件夹中找到可执行文件,然后将其用作<StartProgram>元素中的属性吗?

编辑:

就像是:

<ItemGroup>
    <Runners Include="$(MSBuildProjectDirectory)\..\..\Packages\xunit.runners.*\tools\xunit.gui.clr4.exe" />
</ItemGroup>

会给我所有的跑步者@(Runners),按版本排序。我怎样才能得到其中一个,最好是最后一个?

4

2 回答 2

1

对于过滤,您可以构建自定义任务。它甚至可以内联http://msdn.microsoft.com/en-us/library/dd722601.aspx,如果您可以编写循环项目并选择正确的项目所需的 c# 代码。然后,您可以在输出属性中公开所选路径,然后使用该属性设置 StartProgram 属性的值。

这个问题显示了一个自定义内联任务,它获取一个项目数组并用它做一些事情。您可能可以从那里开始。

您需要在启动调试的目标之前运行的目标中使用此任务。

于 2012-11-06T19:19:21.337 回答
0

随着fsimonazzi评论,我最终得到了这个:

<PropertyGroup>
  <Package>$([System.IO.Directory]::GetDirectories("$(MSBuildProjectDirectory)\\..\\..\\Packages\\", "xunit.runners.*").GetValue(0))</Package>
  <StartAction>Program</StartAction>
  <StartProgram>$(Package)\tools\xunit.gui.clr4.exe</StartProgram>
  <StartArguments>"$(MSBuildProjectDirectory)\$(OutPutPath)$(AssemblyName).dll"</StartArguments>
</PropertyGroup>

显然,NuGet 将保证只有一个版本的包。

于 2012-11-07T09:46:37.767 回答