C# 使用ProcessStartInfo发出执行链接命令

C# 使用ProcessStartInfo发出执行链接命令,c#,cmd,process,msbuild,C#,Cmd,Process,Msbuild,我有以下用于执行命令行进程的代码: public ProcessResult ExecuteCommand(string command, string startdir, string arguments = "") { ProcessResult result = new ProcessResult(); var processInfo = new ProcessStartInfo { Arguments = arguments,

我有以下用于执行命令行进程的代码:

public ProcessResult ExecuteCommand(string command, string startdir, string arguments = "")
{
    ProcessResult result = new ProcessResult();

    var processInfo = new ProcessStartInfo
    {
        Arguments = arguments,
        CreateNoWindow = false,
        UseShellExecute = false,
        RedirectStandardError = true,
        RedirectStandardOutput = true,
        WorkingDirectory = startdir,
        Verb = "runas",
        FileName = command
    };

    // Redirect the output
    using (Process process = Process.Start(processInfo))
    {
        process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
        {
            result.StandardOutput.Add(e.Data);
            Console.WriteLine(e.Data);
        };
        process.BeginOutputReadLine();

        process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
        {
            result.StandardError.Add(e.Data);
            Console.WriteLine(e.Data);
        };
        process.BeginErrorReadLine();

        process.WaitForExit();

        result.ExitCode = process.ExitCode;
    }

    return result;
}
我试图启动开发人员命令提示符并执行msbuild命令,但遇到了一些问题。在命令行上,这可以正常工作:

“C:\Program Files(x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat“&msbuild C:\Users\Documents\Development\Automation.AutoIVU\AutoIVU\AutoIVU\AutoIVU.csproj /p:ConfigurationPtforms=Release/p:Platform=“X64”

但当我在代码中执行相同的操作时,它会失败:

string vsBuildConsole = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\Common7\\Tools\\VsDevCmd.bat";

string autoIVUProjPath = "C:\\Users\\Documents\\Development\\Automation.AutoIVU\\AutoIVU\\AutoIVU\\AutoIVU.csproj";

string msBuildCommand = $"msbuild \"{autoIVUProjPath}\" /t:Build /p:ConfigurationPlatforms=Release /p:Platform = \"X64\"";

ProcessResult result = this.ExecuteCommand("C:\\Windows\\System32\\cmd.exe", ".", $"/C \"{vsBuildConsole}\" & {msBuildCommand}");
命令:

C:\Windows\System32\cmd.exe
论据:

/C“C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat“&msbuild “C:\Users\Documents\Development\Automation.AutoIVU\AutoIVU\AutoIVU\AutoIVU.csproj” /t:Build/p:ConfigurationPlatforms=Release/p:Platform=“X64”

输出:


“'C:\\Program'未被识别为内部或外部命令、可操作程序或批处理文件。”

看起来您实际上并没有像您认为的那样将路径括在引号中。查看分配
参数的代码将很有帮助。感谢您的回复,我已经更新了@itsme86的更多信息