Visual Studio 2010 自动化和环境变量

本文关键字:环境变量 自动化 2010 Studio Visual | 更新日期: 2023-09-27 18:08:34

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

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

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

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

Visual Studio 2010 自动化和环境变量

是否可以在您的

环境中自己启动 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");

如果您有多个正在运行的 VS 实例,您会遇到问题,但这也很容易。您可以使用特定的 VS 实例,在该实例中,您只需要知道自行启动的 VS 实例的进程 ID。

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

不完全确定这是否是您要查找的内容,但可以从(假设 Windows 7(更改 Windows 环境变量:控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 环境变量(按钮(。

在此屏幕中,您可以设置用户变量以及系统变量。也许您希望应用查找的设置存储在用户而不是系统下,然后在其他用户下打开应用会导致这些变量不可用?

创建您需要的变量作为系统变量可以解决您的问题吗?