Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#DeveloperCommandPrompt_C#_Visual Studio_Cmd_Process - Fatal编程技术网

C#DeveloperCommandPrompt

C#DeveloperCommandPrompt,c#,visual-studio,cmd,process,C#,Visual Studio,Cmd,Process,我想使用在developerCommandPrompt中设置的环境变量调用命令,如msbuild/dumpbin 我没有使用C#的经验,也找不到一个干净的方法来实现这一点。我想到的是,首先运行ProcessdeveloperCommandPrompt并读取set命令输出以检索所有流程环境变量,然后调用新流程,但这次是使用检索到的环境变量字典 但事实证明,我甚至无法让set命令结果起作用 class Program { static void Main(string[] args)

我想使用在
developerCommandPrompt
中设置的环境变量调用命令,如
msbuild
/
dumpbin

我没有使用C#的经验,也找不到一个干净的方法来实现这一点。我想到的是,首先运行Process
developerCommandPrompt
并读取
set
命令输出以检索所有流程环境变量,然后调用新流程,但这次是使用检索到的环境变量字典

但事实证明,我甚至无法让
set
命令结果起作用

class Program
{
    static void Main(string[] args)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo {
            FileName = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Tools\\VsDevCmd.bat",
            UseShellExecute = false,
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            CreateNoWindow = true
    };

        Process devCmd = new Process();
        devCmd.StartInfo = startInfo;
        devCmd.Start();

        devCmd.StandardInput.WriteLine("set");
        devCmd.StandardInput.Flush();
        devCmd.StandardInput.Close();
        devCmd.WaitForExit();
        Console.WriteLine(devCmd.StandardOutput.ReadToEnd());
    }
}
我相信我做错了什么(比如当我把
set
更改为
dir
时,它也不起作用)。不幸的是,我不知道我错过了什么:)

此外,如果有人能从C#中找到一个更智能/更清洁的解决方案来运行Microsoft toolset,那么我很乐意听你这么说


谢谢

您需要使用
cmd.exe
作为
文件名
并将
参数设置为VS dev控制台bat文件的路径,如下所示:

ProcessStartInfo startInfo = new ProcessStartInfo
    {
        FileName = @"cmd.exe",
        UseShellExecute = false,
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
        CreateNoWindow = true,
        Arguments = @"""C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat"""
    };
更新 我正在合线

@Guru Stron已经找到了为什么我不能从开发者命令提示符中收集环境变量。您可以查看上面的答案,但这只是我代码中的一个bug

编译 如果有人对C++编译VisualStudio项目感兴趣,那么我在这里找到了一个解决方案:

确保添加所有Microsoft.Msbuild.*包的正确引用(不是4.0版本)


如果您对编译c#project感兴趣,那么我建议您使用project。

VSC有一个批处理文件来进行设置。太好了!现在我也明白了@markcomment:)我不会关闭这个线程,因为也许有人会想出比我更干净的解决方案。但你的解决了我的问题:)你真正需要工具集的哪一部分?你想达到什么目的?我当然想用
msbuild
编译C项目,但最近我发现我需要一种方法以编程方式分解汇编程序,所以我想我也想使用
dumpbin
。@RobD,你考虑过使用吗?