如何检查项目是否是最新的?
我基本上是在尝试以编程方式在列表中构建每个项目,但前提是它们已更改。那么有没有人知道一种方法(可能使用 EnvDTE)来检查项目是否更改并因此需要编译?
提前感谢所有帮助。
使用 EnvDTE.Document 接口:
Document d = //get document
bool saved = d.Saved;
如果文档是脏的,Saved 属性将为 false。
您可以使用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()来构建项目及其依赖项。