/// <summary> /// This method adds a new ProjectReference item to the specified instance. The reference will either be to its metaproject (if the project /// is a web project or has reference of its own) or to the project itself (if it has no references and is a normal MSBuildable project.) /// </summary> private void AddProjectReference(ProjectInstance traversalProject, ProjectInstance projectInstance, ProjectInSolution projectToAdd, ProjectConfigurationInSolution projectConfiguration, bool direct) { ProjectItemInstance item; if (direct) { // We can build this project directly, so add its reference. item = projectInstance.AddItem("ProjectReference", EscapingUtilities.Escape(projectToAdd.AbsolutePath), null); item.SetMetadata("ToolsVersion", GetToolsVersionMetadataForDirectMSBuildTask(traversalProject)); item.SetMetadata("SkipNonexistentProjects", "False"); // Skip if it doesn't exist on disk. item.SetMetadata("AdditionalProperties", GetPropertiesMetadataForProjectReference(traversalProject, GetConfigurationAndPlatformPropertiesString(projectConfiguration))); } else { // We cannot build directly, add the metaproject reference instead. item = projectInstance.AddItem("ProjectReference", GetMetaprojectName(projectToAdd), null); item.SetMetadata("ToolsVersion", traversalProject.ToolsVersion); item.SetMetadata("SkipNonexistentProjects", "Build"); // Instruct the MSBuild task to try to build even though the file doesn't exist on disk. item.SetMetadata("AdditionalProperties", GetPropertiesMetadataForProjectReference(traversalProject, SolutionConfigurationAndPlatformProperties)); } // Set raw config and platform for custom build steps to use if they wish // Configuration is null for web projects if (projectConfiguration != null) { item.SetMetadata("Configuration", projectConfiguration.ConfigurationName); item.SetMetadata("Platform", projectConfiguration.PlatformName); } }