Visual Studio 2010自动化和环境变量

wil*_*ilx 6 c# com automation visual-studio-2010 visual-studio

我正在使用C#和VS2010自动化打开VS2010解决方案.我打开这样的解决方案:

Type type = Type.GetTypeFromProgID("VisualStudio.DTE.10.0", true);
Object comObject = Activator.CreateInstance(type);
...
sol.Open(solution_full_path);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我创建VisualStudio.DTE.10.0对象的实例时,它会启动devenv.exewinlogon.exe我的应用程序看到完全不同的环境的过程.某些环境变量对于解析项目中设置的某些路径很重要.

有什么方法可以影响devenv.exe流程的环境变量吗?有什么方法可以使用VS2010自动化接口注入环境/属性吗?

Alo*_*aus 2

是否可以在您的环境中自行启动 devenv。然后通过运行对象表 (ROT)获取正在运行的Visual Studio 实例。

// Get an instance of the currently running Visual Studio IDE.
EnvDTE80.DTE2 dte2;
dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
GetActiveObject("VisualStudio.DTE.10.0");
Run Code Online (Sandbox Code Playgroud)

如果您有多个正在运行的 VS 实例,您将会遇到问题,但这也是一个简单的问题。您只需知道自己启动的 VS 实例的进程 ID,即可获得特定的 VS 实例。

Visual Studio 还将 ProgID 注册为 ROT 中的项目名称。ProgID 由 DTE 进程的名称和进程 ID 组成。因此,例如,对象的 ROT 条目可能是“!VisualStudio.DTE.10.0:1234”,其中 1234 是进程 ID。