【问题标题】:C# DeveloperCommandPromptC# 开发人员命令提示符
【发布时间】:2020-05-10 09:13:19
【问题描述】:

我想用DevelopersCommandPrompt中设置的环境变量调用诸如msbuild/dumpbin之类的命令。

我没有使用 C# 的经验,也找不到实现此目的的干净方法。我想到的是,首先运行 Process DevelopersCommandPrompt 并读取 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 工具集的更智能/更清洁的解决方案,那么我很想听听。 :)

谢谢

【问题讨论】:

  • VSC 有一个批处理文件来设置它。

标签: c# visual-studio cmd process


【解决方案1】:

您需要将cmd.exe 用作FileName 并将Arguments 设置为VS 开发控制台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"""
    };

【讨论】:

  • 太棒了!现在我也理解@Mark 评论:) 我不会关闭这个线程,因为也许有人会想出比我更干净的解决方案。但你的解决了我的问题:)
  • 您真正需要工具集的哪一部分?你想达到什么目的?
  • 我肯定想用msbuild编译C项目,但最近我发现我需要一种方法来以编程方式反汇编程序,所以我想我也想用dumpbin .
  • @RobD,你有没有想过使用Roslyn
【解决方案2】:

更新 我正在关闭线程。

@Guru Stron 找到了我无法从开发人员命令提示符收集环境变量的原因。您可以在上面查看他的答案,但这只是我的代码中的一个错误。

编译 如果有人对从 c# 编译 c++ Visual Studio 项目感兴趣,那么我在这里找到了解决方案:https://gist.github.com/jeremybeavon/5736e0acbf3729092887

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

如果您对编译 c# 项目感兴趣,那么我建议您使用 https://github.com/daveaglick/Buildalyzer 项目。

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多