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#的经验,也找不到一个干净的方法来实现这一点。我想到的是,首先运行ProcessdeveloperCommandPrompt
并读取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,你考虑过使用吗?