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)のすべてのランナーをバージョン別に並べ替えてくれます。そのうちの 1 つ、できれば最後のものを入手するにはどうすればよいですか?

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 は、パッケージのバージョンが 1 つだけであることを保証します。

于 2012-11-07T09:46:37.767 に答える