プロジェクトが最新かどうかを確認するにはどうすればよいですか?
私は基本的に、リスト内の各プロジェクトをプログラムでビルドしようとしていますが、それらが変更された場合に限ります。では、プロジェクトが変更されたためにコンパイルする必要があるかどうかを確認する方法(おそらく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()を使用して、プロジェクトとその依存関係をビルドできます。