4

如何检查项目是否是最新的?

我基本上是在尝试以编程方式在列表中构建每个项目,但前提是它们已更改。那么有没有人知道一种方法(可能使用 EnvDTE)来检查项目是否更改并因此需要编译?

提前感谢所有帮助。

4

2 回答 2

0

使用 EnvDTE.Document 接口:

Document d = //get document
bool saved = d.Saved;

如果文档是脏的,Saved 属性将为 false。

于 2009-11-05T21:17:35.547 回答
0

您可以使用VCConfiguration的UpToDate属性来完成。

假设您可以获得EnvDTE.DTE的实例,您可以获得活动项目所需的VCProjectEngine VCConfiguration,如下所示:

public Project GetSolutionStartupProject(DTE dte)
{
  string startupProjectName = String.Empty;

  SolutionBuild solutionBuild = dte.Solution.SolutionBuild as SolutionBuild;
  foreach (string item in solutionBuild.StartupProjects as Array)
  {
    startupProjectName += item;
  }

  return dte.Solution.Item(startupProjectName);
}

public void BuildStartupProject(DTE dte)
{
  Project project = GetSolutionStartupProject(dte);
  Configuration activeConfiguration = project.ConfigurationManager.ActiveConfiguration;

  // annoyingly can't just do activeConfiguration.Object as VCConfiguration
  //
  VCProject vcProject = project.Object as VCProject;
  VCConfiguration vcActiveConfiguration = null;
  foreach (VCConfiguration vcConfiguration in vcProject.Configurations)
  {
    if (vcConfiguration.ConfigurationName == activeConfiguration.ConfigurationName &&
        vcConfiguration.Platform.Name == activeConfiguration.PlatformName)
    {
      vcActiveConfiguration= vcConfiguration;
      break;
    }
  }

  if (!vcActiveConfiguration.UpToDate)
  {
    vcActiveConfiguration.Build();
  }
}

如果您想完成解决方案中的所有项目,那么它会更容易,因为您不需要找到启动项目。重要的部分是将 DTE Project的实例转换为VCProjectEngine VCProject,完成后循环VCConfigurations应该很容易。

另外值得注意的是,VCConfiguration.Build()只会构建该配置,如果依赖项尚未构建,则会失败。您可以使用SolutionBuild.BuildProject()来构建项目及其依赖项。

于 2013-03-08T00:01:39.067 回答