繁体   English   中英

无法使用VS 2015实用地打开Visual Studio命令提示符

[英]Unable to open Visual Studio Command Prompt pragmatically using VS 2015

我想以编程方式运行Visual Studios命令。我尝试了上面的代码,但没有帮助。我得到的只是一个打开项目目录的命令提示符。

我已经使用Execute(“ VS140COMNTOOLS”)作为输入。

 private void Execute(string vsEnvVar) {

        var vsInstallPath = Environment.GetEnvironmentVariable(vsEnvVar);

        if (Directory.Exists(vsInstallPath)) {
            var filePath = vsInstallPath + "vsvars32.bat";
            if (File.Exists(filePath)) {
                //start vs command process
                Process proc = new Process();

                var command = Environment.GetEnvironmentVariable("ComSpec");
                command = @"" + command + @"";

                //var batfile = @"E:\Test\vstest.bat";
                var args = string.Format("/S/K \" \"{0}\" \"", filePath);

                proc.StartInfo.FileName = command;
                proc.StartInfo.Arguments = args;

                //proc.StartInfo.RedirectStandardInput = true;
                //proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.CreateNoWindow = false;
                proc.StartInfo.UseShellExecute = false;

                proc.Start();
            } else {
                Console.WriteLine("File Does not exists " + filePath);
            }
        }
    }

尝试这个:

private Process Execute(string vsEnvVar)
    {
        Process process = new Process();
        ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");//assume location is in path. Otherwise use ComSpec env variable
        psi.CreateNoWindow = true;
        psi.UseShellExecute = false;
        psi.RedirectStandardError = true;
        psi.RedirectStandardInput = true;
        psi.RedirectStandardOutput = true;
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        process.StartInfo = psi;
        // attach output events 
        process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
        process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
        process.StartInfo = psi;
        process.Start();
        process.BeginErrorReadLine();
        process.BeginOutputReadLine();
        process.StandardInput.WriteLine(string.Format("call \"%{0}%vsvars32.bat\""), vsEnvVar);
        process.StandardInput.Flush();
        return process;
    }

现在您可以通过写入process.StandardInput执行任何命令

process.StandardInput.WriteLine(@"msbuild c:\MySolution.sln /t:Clean");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM