protected override BuildResult Build(IProgressMonitor monitor, SolutionEntityItem item, ConfigurationSelector configuration) { MoonlightProject proj = item as MoonlightProject; DotNetProjectConfiguration conf = null; if (proj != null) { conf = proj.GetConfiguration(configuration) as DotNetProjectConfiguration; } if (conf == null) { return(base.Build(monitor, item, configuration)); } BuildResult result = base.Build(monitor, item, configuration); if (result.ErrorCount > 0 || monitor.IsCancelRequested) { return(result); } if (proj.GenerateSilverlightManifest) { if (result.Append(GenerateManifest(monitor, proj, conf, configuration)).Failed || monitor.IsCancelRequested) { return(result); } } if (proj.XapOutputs) { if (result.Append(Zip(monitor, proj, conf, configuration)).Failed || monitor.IsCancelRequested) { return(result); } } if (proj.XapOutputs && proj.CreateTestPage) { result.Append(CreateTestPage(monitor, proj, conf)); } return(result); }
protected override bool GetNeedsBuilding(SolutionEntityItem item, ConfigurationSelector configuration) { MoonlightProject proj = item as MoonlightProject; DotNetProjectConfiguration conf = null; if (proj != null) { conf = proj.GetConfiguration(configuration) as DotNetProjectConfiguration; } if (conf == null) { return(base.GetNeedsBuilding(item, configuration)); } if (base.GetNeedsBuilding(item, configuration)) { return(true); } var objDir = GetObjDir(proj, conf); DateTime xapLastMod = DateTime.MaxValue; if (proj.XapOutputs) { var xapName = GetXapName(proj, conf); if (!File.Exists(xapName)) { return(true); } xapLastMod = File.GetLastWriteTime(xapName); } var manifest = conf.OutputDirectory.Combine("AppManifest.xaml"); if (proj.GenerateSilverlightManifest) { if (!File.Exists(manifest)) { return(true); } if (!String.IsNullOrEmpty(proj.SilverlightManifestTemplate)) { string template = proj.GetAbsoluteChildPath(proj.SilverlightManifestTemplate); if (File.Exists(template) && File.GetLastWriteTime(template) > File.GetLastWriteTime(manifest)) { return(true); } } } if (proj.CreateTestPage) { string testPageFile = GetTestPageFileName(proj, conf); if (!File.Exists(testPageFile)) { return(true); } } string appName = proj.Name; var resFile = objDir.Combine(appName + ".g.resources"); DateTime resLastMod = DateTime.MinValue; if (File.Exists(resFile)) { resLastMod = File.GetLastWriteTime(resFile); } foreach (ProjectFile pf in proj.Files) { if ((pf.BuildAction == BuildAction.Page || pf.BuildAction == BuildAction.ApplicationDefinition || pf.BuildAction == BuildAction.Resource) && File.GetLastWriteTime(pf.FilePath) > resLastMod) { return(true); } if (pf.FilePath.Extension == ".xaml" && pf.Generator == "MSBuild:MarkupCompilePass1") { var outFile = objDir.Combine(proj.LanguageBinding.GetFileName(pf.FilePath.FileName + ".g")); if (!File.Exists(outFile) || File.GetLastWriteTime(outFile) < File.GetLastWriteTime(pf.FilePath)) { return(true); } } if (pf.BuildAction == BuildAction.Content && File.GetLastWriteTime(pf.FilePath) > xapLastMod) { return(true); } } return(false); }
protected override void Clean(IProgressMonitor monitor, SolutionEntityItem item, ConfigurationSelector configuration) { MoonlightProject proj = item as MoonlightProject; DotNetProjectConfiguration conf = null; if (proj != null) { conf = proj.GetConfiguration(configuration) as DotNetProjectConfiguration; } base.Clean(monitor, item, configuration); if (conf == null) { return; } var objDir = GetObjDir(proj, conf); if (!Directory.Exists(objDir)) { return; } foreach (ProjectFile pf in proj.Files) { if (pf.FilePath.Extension == ".xaml" && pf.Generator == "MSBuild:MarkupCompilePass1") { var outFile = objDir.Combine(proj.LanguageBinding.GetFileName(pf.FilePath.FileName + ".g")); if (File.Exists(outFile)) { File.Delete(outFile); } } } if (proj.GenerateSilverlightManifest) { var manifest = conf.OutputDirectory.Combine("AppManifest.xaml"); if (File.Exists(manifest)) { File.Delete(manifest); } } if (proj.CreateTestPage) { string testPageFile = GetTestPageFileName(proj, conf); if (File.Exists(testPageFile)) { File.Delete(testPageFile); } } var resFile = objDir.Combine(proj.Name + ".g.resources"); if (File.Exists(resFile)) { File.Delete(resFile); } if (proj.XapOutputs) { var xapName = GetXapName(proj, conf); if (File.Exists(xapName)) { File.Delete(xapName); } } }