/// <summary> /// Add a target for a VC project file into the XML doc that's being generated. /// This is used only when building standalone VC projects /// </summary> /// <param name="msbuildProject"></param> /// <param name="projectPath"></param> /// <param name="targetName"></param> /// <param name="subTargetName"></param> /// <owner>RGoel</owner> static private void AddVCBuildTarget ( Project msbuildProject, string projectPath, string targetName, string subTargetName ) { Target newTarget = msbuildProject.Targets.AddNewTarget(targetName); if (subTargetName == "Publish") { // Well, hmmm. The VCBuild doesn't support any kind of // a "Publish" operation. The best we can really do is offer up a // message saying so. SolutionWrapperProject.AddErrorWarningMessageElement(newTarget, XMakeElements.error, true, "SolutionVCProjectNoPublish"); } else { SolutionWrapperProject.AddErrorWarningMessageElement(newTarget, XMakeElements.warning, true, "StandaloneVCProjectP2PRefsBroken"); string projectFullPath = Path.GetFullPath(projectPath); AddVCBuildTaskElement(msbuildProject, newTarget, "$(VCBuildSolutionFile)", projectFullPath, subTargetName, "$(PlatformName)", "$(ConfigurationName)"); } }
/// <summary> /// This method generates an XmlDocument representing an MSBuild project wrapper for a VC project /// </summary> /// <owner>LukaszG</owner> static internal XmlDocument GenerateVCWrapperProject(Engine parentEngine, string vcProjectFilename, string toolsVersion) { string projectPath = Path.GetFullPath(vcProjectFilename); Project msbuildProject = null; try { msbuildProject = new Project(parentEngine, toolsVersion); } catch (InvalidOperationException) { BuildEventFileInfo fileInfo = new BuildEventFileInfo(projectPath); string errorCode; string helpKeyword; string message = ResourceUtilities.FormatResourceString(out errorCode, out helpKeyword, "UnrecognizedToolsVersion", toolsVersion); throw new InvalidProjectFileException(projectPath, fileInfo.Line, fileInfo.Column, fileInfo.EndLine, fileInfo.EndColumn, message, null, errorCode, helpKeyword); } msbuildProject.IsLoadedByHost = false; msbuildProject.DefaultTargets = "Build"; string wrapperProjectToolsVersion = SolutionWrapperProject.DetermineWrapperProjectToolsVersion(toolsVersion); msbuildProject.DefaultToolsVersion = wrapperProjectToolsVersion; BuildPropertyGroup propertyGroup = msbuildProject.AddNewPropertyGroup(true /* insertAtEndOfProject = true */); propertyGroup.Condition = " ('$(Configuration)' != '') and ('$(Platform)' == '') "; propertyGroup.AddNewProperty("ConfigurationName", "$(Configuration)"); propertyGroup = msbuildProject.AddNewPropertyGroup(true /* insertAtEndOfProject = true */); propertyGroup.Condition = " ('$(Configuration)' != '') and ('$(Platform)' != '') "; propertyGroup.AddNewProperty("ConfigurationName", "$(Configuration)|$(Platform)"); // only use PlatformName if we only have the platform part propertyGroup = msbuildProject.AddNewPropertyGroup(true /* insertAtEndOfProject = true */); propertyGroup.Condition = " ('$(Configuration)' == '') and ('$(Platform)' != '') "; propertyGroup.AddNewProperty("PlatformName", "$(Platform)"); AddVCBuildTarget(msbuildProject, projectPath, "Build", null); AddVCBuildTarget(msbuildProject, projectPath, "Clean", "Clean"); AddVCBuildTarget(msbuildProject, projectPath, "Rebuild", "Rebuild"); AddVCBuildTarget(msbuildProject, projectPath, "Publish", "Publish"); // Special environment variable to allow people to see the in-memory MSBuild project generated // to represent the VC project. if (Environment.GetEnvironmentVariable("MSBuildEmitSolution") != null) { msbuildProject.Save(vcProjectFilename + ".proj"); } return(msbuildProject.XmlDocument); }