0

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 コマンド プロンプトを手動で開き、まったく同じパスを入力すると、コードはエラーなしで実行されます。

私は何を間違っていますか?

4

1 に答える 1

0

これは、FnFの問題ではなく、実際には権限の問題である可能性があります。

コードの実行中にfilemonを実行し、OSレベルで実際に何が要求されているかを確認します。

于 2010-09-16T17:59:57.087 に答える