internal static MSBuild.Project LoadProject(MSBuild.ProjectCollection buildEngine, string fullProjectPath) { var buildProject = buildEngine.GetLoadedProjects(fullProjectPath).FirstOrDefault(); if (buildProject != null) { buildEngine.UnloadProject(buildProject); } return buildEngine.LoadProject(fullProjectPath); }
/// <summary> /// Loads a project file for the file. If the build project exists and it was loaded with a different file then it is unloaded first. /// </summary> /// <param name="engine">The build engine to use to create a build project.</param> /// <param name="fullProjectPath">The full path of the project.</param> /// <param name="exitingBuildProject">An Existing build project that will be reloaded.</param> /// <returns>A loaded msbuild project.</returns> internal static MSBuild.Project ReinitializeMsBuildProject(MSBuild.ProjectCollection buildEngine, string fullProjectPath, MSBuild.Project exitingBuildProject) { // If we have a build project that has been loaded with another file unload it. try { if (exitingBuildProject != null && exitingBuildProject.ProjectCollection != null && !CommonUtils.IsSamePath(exitingBuildProject.FullPath, fullProjectPath)) { buildEngine.UnloadProject(exitingBuildProject); } } // We catch Invalid operation exception because if the project was unloaded while we touch the ParentEngine the msbuild API throws. // Is there a way to figure out that a project was unloaded? catch (InvalidOperationException) { } return Utilities.InitializeMsBuildProject(buildEngine, fullProjectPath); }