使用c#加载解决方案(.sln)文件的问题

时间:2013-05-15 06:20:21

标签: c# visual-studio-2010 environment-variables solution envdte

我正在尝试使用c#加载解决方案文件。我正在使用 DTE 对象执行此操作。以下是实现此目的的代码段。

DTE DteObject = new DTE();
DteObject.Solution.Open(@SolutionFilePath);
DteObject.Solution.AddFromFile(@SolutionFilePath);

现在,要打开任何特定的解决方案(.sln)文件,我需要设置一些环境变量,这些环境变量的值对于每个解决方案(.sln)文件都是不同的。

为了自动化这个过程,我为Dictionary中的每个.sln文件( oldEnvList )保存了这些环境变量的值,并创建了 SolutionLoadEvents 类继承 IvsSolutionEvents ,我也在 IvsSolutionEvents 中覆盖 OnBeforeOpenSolution 方法来实现此目的。

public class SolutionLoadEvents : IVsSolutionLoadEvents, IVsSolutionEvents
{
    public SolutionLoadEvents(){}
    public int OnBeforeOpenSolution(string pszSolutionFilename)
    {
     foreach (KeyValuePair<string, string> prop in oldEnvList)
     {                                       
       Environment.SetEnvironmentVariable(prop.Key, prop.Value);
     }
     return Microsoft.VisualStudio.VSConstants.S_OK;
    }
}

因此,只要打开解决方案文件,如 DteObject.Solution.Open(@SolutionFilePath); ,就会调用 OnBeforeOpenSolution 方法并设置所需的环境变量。但是存在一个问题,并非使用这种方式正确加载每个解决方案文件。其中的大多数项目都显示为不可用

Using DTE object

但是如果我从命令提示符设置了必需的环境变量,然后从命令提示符打开相同的解决方案文件,那么它就会正常打开。

opened from Command prompt by setting env. vars from cmd

你能告诉我这里出错了吗?在解决方案文件中打开时是否需要执行更多操作?

0 个答案:

没有答案