SVN pre-commit フック内から実行される単純なコンソール アプリから MSTest.exe を呼び出そうとしています。
TortoiseSVN を使用してコミットすると、以下のコンソール アプリ コードが自動実行されます。
(コードの後にスキップして、何が起こるかを確認してください...)
// コード
static void Main(string[] args)
{
string testPath = @"C:\Users\myname\Documents\SVN\Test\bin\Debug\TestProject1.dll";
string mstest = GetMSTestOutput(testPath);
if (mstest != null)
{
Console.Error.WriteLine(mstest);
Environment.Exit(1); // I WANT it to stop here, so I can see output while testing
}
}
private static string GetMSTestOutput(string testPath)
{
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
FileName = @"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
Arguments = String.Format("/testcontainer:{0}", testPath)
};
Process process = Process.Start(processStartInfo);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return output;
}
// 出力
これは、TortoiseSVN ウィンドウに表示されるものです。
エラー: コミットに失敗しました (詳細は次のとおりです):
エラー: コミットはプレコミット フック (終了コード 1) によってブロックされ、出力:
エラー: Microsoft (R) テスト実行コマンド ライン ツール バージョン 10.0.30319.1
エラー: Copyright (c) Microsoft Corporation. 全著作権所有。
エラー:
エラー: ファイル
エラー: "C:\Users\myname\Documents\SVN\Test\bin\Debug\TestProject1.dll"
エラー: 見つかりません .
したがって、MSTest を正しく呼び出していることがわかりますが、パスが間違っていると主張しています。
しかし、VS コマンド プロンプトを手動で開き、まったく同じパスを入力すると、コードはエラーなしで実行されます。
私は何を間違っていますか?